如何加快从转储文件恢复 MySQL 的速度?

如何加快从转储文件恢复 MySQL 的速度?

我正在将 mysqldump 文件中的 30GB 数据库还原到新服务器上的空数据库。当从转储文件运行 SQL 时,还原开始非常快,然后开始变得越来越慢。单个插入现在需要 15 秒以上。表主要是 MyISAM,带有一个小的 InnoDB。服务器没有其他活动连接。SHOW PROCESSLIST;仅显示来自还原的插入(以及 show processlist 本身)。

有谁知道是什么原因导致经济急剧放缓?

是否有任何 MySQL 变量可以更改,以便在恢复过程中加快速度?

答案1

有一件事可能会减缓这一进程,那就是密钥缓冲区大小,这是用于索引块的缓冲区的大小。将其调整为至少 RAM 的 30%,否则重新索引过程可能会太慢。

作为参考,如果您使用 InnoDB 和外键,您也可以禁用外键检查并在最后重新启用它(使用SET FOREIGN_KEY_CHECKS=0SET FOREIGN_KEY_CHECKS=1)。

答案2

此链接显示了可以采取哪些措施来加快恢复过程。

http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

可以将命令放在转储文件的顶部

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

并将这些语句放在转储文件的末尾

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

这对我有用。恢复顺利 :-)

答案3

这将做到:

mysql --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;SET UNIQUE_CHECKS=0;" -u root -p < Backup_Database.mysql

答案4

如果你有多张桌子,你可能会受益于mk-并行-恢复

相关内容