什么是最快的方式转储&载MySQL少数据库使用快照?
题
我想创建一个数据库的副本与大约40少表和大约1.5GB的数据用快照,并MySQL5.1.
什么是最好的参数(即:--single-交易),这将导致在最快捷的转储以及负荷的数据?
同样,当将数据加载到第二个数据库,这是加快:
1)管结果直到第二MySQL server实例和使用--compress选项
或
2)载荷从一个文本的文件(即:mysql < my_sql_dump.sql)
解决方案
将其直接管道到另一个实例,以避免磁盘开销。除非您在慢速网络上运行,否则请不要理会 - compress
,因为在快速LAN或环回时,网络开销并不重要。
其他提示
快倾销一个静止的数据库:
使用"T"选用快照结果在很多。sql。txt文件中规定的目录。这是大约50%的速度倾销的大表于一个单一的。sql文件中插入的发言(占1/3的小壁钟的时间)。
此外,还有一个巨大的效益,在恢复如果你可以载多个表格,并且饱和多核心。在一个8的核心框,这可能是多8倍的差异壁钟的时间来恢复的倾倒,上面的效率改进提供"-T"。因为"-T"使每一个表中可存储在一个单独的文件,载他们在平行的是,更易于分裂一个巨大的。sql文件。
采取的战略上他们的逻辑极限,可以创建一个脚本来倾倒数据库广泛行。嗯,这是什么Maakit mk-并行抛(见 http://www.maatkit.org/doc/mk-parallel-dump.html)和mk-并恢复的工具;perl脚本进行多次呼吁潜在的快照的程序。然而,当我试图使用这些,我有麻烦的恢复不完整的重复键错误,没有发生与香草堆放场,所以记得你的里程数可能有所不同。
倾倒数据从现场数据库(w/o服务中断):
的--单个交易的交换是非常有用的考虑倾倒的现场数据库中不具有静止或考虑倾倒的一个从数据库中不具有停止苦干.
可悲的是,是不兼容的--单交易,所以你只能得到一个。
通常,如果倾倒更快地恢复。仍然有一种工具,采取进入的整体转储文件,并将其分成多块被装载在平行的。据我所知,这种工具还不存在。
转移倾倒在网络通常是一个双赢的
听来倾倒在一个主机的运行:
nc -l 7878 > mysql-dump.sql
然后在数据库的主机,运行
mysqldump $OPTS | nc myhost.mydomain.com 7878
这降低了竞争的磁盘上的主人从文字转向盘稍微加快你甩(假定该网络是足够快的速度跟上,一个相当的安全假设的两个主机在同一个数据中心).另外,如果你正在建设出一个新奴隶,这样可以节省的步骤具有转移倾倒文件后完成。
需要注意的-当然,你需要有足够的网络带宽不要慢下来的东西无法忍受的,并且如果TCP届会议的休息,你必须开始一切都过去了,但对于大多数转储这不是一个主要关切的问题。
最后,我想明确一点的共同混乱。
尽管你经常看到这些标志在快照实例和教程,它们都是多余的,因为它们是通过默认:
--opt
--add-drop-table
--add-locks
--create-options
--disable-keys
--extended-insert
--lock-tables
--quick
--set-charset
.
从 http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html:
使用的选择--是相同的指定--加拉表--加锁--创建的选项,--disable-键--的扩展插入,--锁定-桌子,-快,和--set-charset。所有的选项--选择的代表也正在通过默认,因为--选择是默认。
这些行为"--快速"是一个最重要的(跳过缓存的整个结果是设置在该在发射之前的第一行),并且可以与"mysql"(其不转--快速上的默认情况下),以大大加速查询返回的一大的结果设置(例如倾倒的所有行的一个大表)。
我认为如果您尝试数据库复制,而不是使用mysqldump。我亲自使用 sqlyog enterprise 进行真正繁重的工作,但也有一些其他可提供相同服务的工具。除非您当然只想使用mysqldump。
对于innodb, - order-by-primary --extended-insert通常是最好的组合。如果您的每一个性能和目标框之后都有许多CPU内核,您可能希望拆分生成的转储文件并在许多线程中执行并行插入,最多为innodb_thread_concurrency / 2。
另外,将目标上的innodb_buffer_pool_size调整到你能承受的最大值,并将innodb_log_file_size增加到128或256 MB(小心这一点,你需要在重启mysql守护进程之前删除旧的日志文件,否则它不会重启)
使用Maatkit的mk-parallel-dump工具。
至少那可能会更快。我更信任mysqldump。
你多久这样做?它真的是应用程序性能问题吗?也许您应该设计一种不需要转储整个数据的方法(复制?)
另一方面,1.5G是一个非常小的数据库,所以它可能不会有太大问题。