mysqldump
速度相当快,但使用mysql my_database < my_dump_file.sql
我可以调整一些mysql设置以加快负载吗?有没有更好的方法来加载保存的数据?
我已经尝试将mysqlimport实用程序与基于CSV的转储一起使用。这些负载略微 - 但不明显 - 加快。我很想复制原始数据库文件,但这似乎是一个坏主意。
答案 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表,您可以通过停止服务器,将它们复制到已停止的服务器并启动它来安全地复制它们。
如果您不想停止原始服务器,可以按照以下步骤操作:
但我很确定你的副本到服务器需要在你把它们放到位时停止。
答案 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/