可能重复:
加快 mysql 转储和导入
mysqldump
相当快,但中型数据库(20-30 兆)的转储需要几分钟才能加载使用mysql my_database < my_dump_file.sql
是否有一些我可以调整以加快负载的 mysql 设置?有没有更好的方法来加载保存的数据?
我已经尝试将 mysqlimport 实用程序与基于 CSV 的转储一起使用。这些加载速度稍快 - 但不是明显 - 更快。我很想只复制原始数据库文件,但这似乎是个坏主意。
可能重复:
加快 mysql 转储和导入
mysqldump
相当快,但中型数据库(20-30 兆)的转储需要几分钟才能加载使用mysql my_database < my_dump_file.sql
是否有一些我可以调整以加快负载的 mysql 设置?有没有更好的方法来加载保存的数据?
我已经尝试将 mysqlimport 实用程序与基于 CSV 的转储一起使用。这些加载速度稍快 - 但不是明显 - 更快。我很想只复制原始数据库文件,但这似乎是个坏主意。
假设您正在使用 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 的博客上找到了使用这些设置的建议,每个设置的详细说明可以在MySQL 文档中找到。
确保--opt
在转储时使用 mysqldump 选项。这将使用批量插入语法、延迟键更新等...
如果您只使用 MyISAM 表,您可以通过停止服务器、将它们复制到停止的服务器并启动它来安全地复制它们。
如果您不想停止源服务器,可以按照以下步骤操作:
但是我很确定当您将它们放置到位时需要停止您的复制到服务器。
试试https://launchpad.net/mydumper - 多线程 mysql 备份/恢复,比 mysqldump http://vbtechsupport.com/1695/快 3 到 10 倍
您确定数据是健全的,并且没有任何文件系统或系统性能问题吗?对于一个 20-30 兆的数据库来说,几分钟是很长的时间。我使用的是 2GB RAM、320GB HD 和标准 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 秒内完成。
有一种使用 LVM 快照进行备份和恢复的方法,这对您来说可能是一个有趣的选择。
考虑使用 LVM 来获取 MySQL 数据目录的快照,而不是执行 mysqldump。使用 LVM 快照可以让您拥有近乎实时的备份能力,支持所有存储引擎,以及令人难以置信的快速恢复。要引用下面的链接,
“恢复时间与放回数据和标准 MySQL 崩溃恢复一样快,而且可以进一步缩短。”
http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/