2008-09-15 60 views
51

是否有任何文档化的技术来加速mySQL转储和导入?加速mysql转储和导入

这将包括my.cnf中设置,使用的ramdisk等

仅寻找记载的技术,优选地与基准电位显示高速化。

回答

15

http://www.maatkit.org/有MK-平行转储和MK-并行恢复

如果你一直希望为多线程的mysqldump,希望没了。该工具并行地转储MySQL表。这是一个非常智能的mysqldump,可以作为mysqldump的包装器(具有合理的默认行为),也可以作为SELECT INTO OUTFILE的包装器。它针对非常大的数据量的高性能应用而设计,其中速度非常重要。它利用多个CPU和磁盘更快地转储数据。

在mysqldump中也有各种可能的选项,例如在导入转储时不做索引 - 而是在完成时完成它们。

4

在转储中使用扩展插入应该使导入速度更快。

+1

如果你这样做的话,如果转储甚至适度大,你将无法再导入回来 – Jonathan 2009-02-21 20:33:45

+0

如何将MySQL客户端是否能够使用扩展插入程序处理中等大小的转储? – che 2009-02-21 22:07:02

+0

我的猜测是,客户端对于读取的每行都有一个固定大小的缓冲区,并且扩展插入超出了该限制。 – Ztyx 2010-04-19 09:10:51

24
  1. 获取副本高性能MySQL。好书。
  2. 在垃圾堆
  3. 扩展刀片与--tab格式转储所以你可以使用的mysqlimport,这是比MySQL快<转储文件
  4. 导入多线程,每个表。
  5. 如果可能,请使用其他数据库引擎。导入到像innodb这样的大量事务性引擎非常缓慢。插入 到非事务性引擎如 MyISAM要快得多。
  6. 查看Maakit工具包中的表格比较脚本,看看您是否可以更新表格而不是转储它们并导入它们。但是 你可能在谈论备份/恢复。
4

关闭外键检查并打开自动提交。

13

如果要导入到InnoDB的,你可以做的最有效的事情是把

innodb_flush_log_at_trx_commit = 2 

my.cnf,暂时导入运行时。如果你需要ACID,你可以把它放回1

+0

我想知道,不会将它设置为'0'更快? – 2013-06-01 07:50:52

+0

真的不明白这是什么,但它加快了我的大型innoDB数据库转储的恢复。对于MyISAM dbs增加`key_buffer_size`的帮助(可用内存的30%)。 – arun 2013-09-22 01:19:27

5

我想你的问题还取决于其中的瓶颈是:

  • 如果您的网络是一个瓶颈,你也可以看看在-C/--compress标志mysqldump
  • 如果您的计算机内存不足(即开始交换),您应该购买更多的内存。

而且,看看在--quick标志mysqldump(和--disable-keys如果您正在使用MyISAM数据)。

1

mysqlhotcopy如果您只有MyIsam表格,也可能是您的替代选择。