MySQL 设置有助于加快 mysqldump 导入

dr_*_*dr_ 6 mysql innodb mysqldump import mysql-5.6

最近我不得不将 7 Gb MySQL 转储文件导入 MySQL 5.6 服务器。在具有 1 Gb RAM 的单核 CPU 上导入大约需要 7 个小时。

其他人在 MySQL 服务器上测试了导入,其中包括以下设置:

innodb_buffer_pool_size = 8G
query_cache_size = 300M
Run Code Online (Sandbox Code Playgroud)

我有点怀疑这些设置的相关性(是的,我什至认为设置如此大的查询缓存很糟糕)。这会有所作为吗?这些设置不是仅在查询数据库时使用,因此与导入无关吗?

如果是,应该设置哪些设置来加速大型转储文件的导入?

根据官方文档,这些值应该暂时设置:

unique_checks = 0
foreign_key_checks = 0
Run Code Online (Sandbox Code Playgroud)

我在这里读到它也应该设置

innodb_flush_log_at_trx_commit = 2
Run Code Online (Sandbox Code Playgroud)

但我认为这不会有帮助,因为默认情况下在 mysqldump 命令(--opt选项)中已禁用自动提交模式(每次插入时将日志刷新到磁盘)。

Rol*_*DBA 8

建议#1

无需运行unique_checks = 0foreign_key_checks = 0。请参阅我 3 年前的帖子加速 mysqldump / reload(ASPECT #2 显示了 mysqldump 的标准标头。第 13 行和第 14 行为您处理禁用这些检查)

建议#2

请注意 InnoDB 架构(图片来自 Percona CTO Vadim Tkachenko)

InnoDB 管道

如果您想重新加载 MySQL 实例,您应该暂时禁用双写缓冲区。

第1步

登录目标服务器并运行

SET GLOBAL innodb_fast_shutdown = 0;
Run Code Online (Sandbox Code Playgroud)

第2步

通过将innodb_doublewrite设置为 OFF来重新启动 mysqld

service mysql restart --innodb-doublewrite=OFF --innodb-fast-shutdown=0
Run Code Online (Sandbox Code Playgroud)

第 3 步

将 mysqldump 加载到目标服务器中

第四步

正常重启mysqld(双写缓冲区将再次启用)

service mysql restart
Run Code Online (Sandbox Code Playgroud)

由于名称“Double Write Buffer”意味着两次写入,InnoDB 只会将数据和索引直接写入表文件,并绕过写入内部的双写入缓冲区 ibdata1. 也许这会使导入时间加倍(双关语)

建议#3

默认innodb_log_buffer_size 为 8M。您需要更大的日志缓冲区。

请将此行添加到[mysqld]组标题下的 my.cnf

[mysqld]
innodb_log_buffer_size = 128M
Run Code Online (Sandbox Code Playgroud)

然后,在重新加载 mysqldump 之前重新启动 mysqld。

试一试 !!!