是否有更快的方式加载mysqldumps?

时间:2009-07-10 21:26:20

标签: mysql mysqldump mysql-management

  

可能重复:
  Speeding up mysql dumps and imports

mysqldump速度相当快,但使用mysql my_database < my_dump_file.sql

加载中型数据库(20-30兆)的转储需要几分钟才能加载

我可以调整一些mysql设置以加快负载吗?有没有更好的方法来加载保存的数据?

我已经尝试将mysqlimport实用程序与基于CSV的转储一起使用。这些负载略微 - 但不明显 - 加快。我很想复制原始数据库文件,但这似乎是一个坏主意。

6 个答案:

答案 0 :(得分:26)

假设你正在使用InnoDB ......

我遇到了一堆现有的mysqldump输出文件,我想在合理的时间内导入它。这些表(每个文件一个)大约500MB,每个包含大约5,000,000行数据。使用以下参数,我能够将插入时间从32分钟缩短到3分钟以下。

  

innodb_flush_log_at_trx_commit = 2
  innodb_log_file_size = 256M
  innodb_flush_method = O_DIRECT

您还需要设置相当大的innodb_buffer_pool_size设置。

因为我的插页是一次性的,所以我之后还原了设置。如果你要长期使用它们,请确保你知道它们正在做什么。

我发现在Cedric Nilly's blog上使用这些设置的建议,可以在MySQL documentation中找到每个设置的详细说明。

答案 1 :(得分:5)

确保在转储时使用mysqldump的--opt选项。这将使用批量插入语法,延迟密钥更新等...


如果您只使用MyISAM表,您可以通过停止服务器,将它们复制到已停止的服务器并启动它来安全地复制它们。

如果您不想停止原始服务器,可以按照以下步骤操作:

  1. 获取所有表格的阅读锁定
  2. 冲洗所有表格
  3. 复制文件
  4. 解锁表格
  5. 但我很确定你的副本到服务器需要在你把它们放到位时停止。

答案 2 :(得分:5)

答案 3 :(得分:4)

您确定数据是否合理,并且没有任何文件系统或系统性能问题? 20-30 meg数据库的几分钟是很长一段时间。我在配备2GB内存,320GB高清和标准2.1GHz处理器的MacBook上。我抓住了我的一个数据库以获得快速基准:

gavinlaking$ du -sm 2009-07-12.glis
74  2009-07-12.glis
gavinlaking$ mysql -pxxx -e "drop database glis"
gavinlaking$ mysql -pxxx -e "create database glis"
gavinlaking$ time mysql -pxxx glis < 2009-07-12.glis 

real    0m17.009s
user    0m2.021s
sys 0m0.301s
一个74兆字节的文件

17秒。这对我来说似乎非常活泼。即使它大4倍(使其只有300兆字节),它也会在不到70秒的时间内完成。

答案 4 :(得分:3)

尝试https://launchpad.net/mydumper - 多线程mysql备份/恢复,比mysqldump http://vbtechsupport.com/1695/

快3到10倍

答案 5 :(得分:1)

有一种方法可以使用LVM快照进行备份和还原,这对您来说可能是一个有趣的选择。

不要使用mysqldump,而是考虑使用LVM来获取MySQL数据目录的快照。使用LVM快照,您可以拥有近乎实时的备份功能,支持所有存储引擎,以及极快的恢复速度。引用下面的链接,

“恢复时间与放回数据和标准MySQL崩溃恢复一样快,并且可以进一步降低。”

http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/