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
选项)中已禁用自动提交模式(每次插入时将日志刷新到磁盘)。
无需运行unique_checks = 0
和foreign_key_checks = 0
。请参阅我 3 年前的帖子加速 mysqldump / reload(ASPECT #2 显示了 mysqldump 的标准标头。第 13 行和第 14 行为您处理禁用这些检查)
请注意 InnoDB 架构(图片来自 Percona CTO Vadim Tkachenko)
如果您想重新加载 MySQL 实例,您应该暂时禁用双写缓冲区。
登录目标服务器并运行
SET GLOBAL innodb_fast_shutdown = 0;
Run Code Online (Sandbox Code Playgroud)
通过将innodb_doublewrite设置为 OFF来重新启动 mysqld
service mysql restart --innodb-doublewrite=OFF --innodb-fast-shutdown=0
Run Code Online (Sandbox Code Playgroud)
将 mysqldump 加载到目标服务器中
正常重启mysqld(双写缓冲区将再次启用)
service mysql restart
Run Code Online (Sandbox Code Playgroud)
由于名称“Double Write Buffer”意味着两次写入,InnoDB 只会将数据和索引直接写入表文件,并绕过写入内部的双写入缓冲区 ibdata1
. 也许这会使导入时间加倍(双关语)
默认innodb_log_buffer_size 为 8M。您需要更大的日志缓冲区。
请将此行添加到[mysqld]
组标题下的 my.cnf
[mysqld]
innodb_log_buffer_size = 128M
Run Code Online (Sandbox Code Playgroud)
然后,在重新加载 mysqldump 之前重新启动 mysqld。
归档时间: |
|
查看次数: |
14763 次 |
最近记录: |