19

可能重复:
加快 mysql 转储和导入

mysqldump相当快,但中型数据库(20-30 兆)的转储需要几分钟才能加载使用mysql my_database < my_dump_file.sql

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

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

4

6 回答 6

30

假设您正在使用 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 文档中找到。

于 2011-12-01T18:11:13.923 回答
6

maatkit - 并行转储

maatkit - 并行恢复

非常快。

于 2009-07-12T23:16:24.060 回答
5

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


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

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

  1. 获取所有表的读锁
  2. 刷新所有表
  3. 复制文件
  4. 解锁桌子

但是我很确定当您将它们放置到位时需要停止您的复制到服务器。

于 2009-07-10T22:13:14.850 回答
4

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

于 2012-01-07T02:54:40.253 回答
3

您确定数据是健全的,并且没有任何文件系统或系统性能问题吗?对于一个 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 秒内完成。

于 2009-07-12T19:53:04.110 回答
1

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

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

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

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

于 2009-07-10T22:33:59.537 回答