0

似乎一个具有几千万条记录的表的MySQL数据库会INSERT INTO在以下情况下得到一个大语句

mysqldump some_db > some_db.sql

完成备份数据库。(它是处理所有记录的 1 个插入语句吗?)

因此,在使用重建数据库时

mysql some_db < some_db.sql

然后 CPU 几乎不忙(mysql 进程的使用率大约为 1.8%...我也没有看到 mysqld?)而且硬盘似乎也不太忙...

上次,整个恢复过程花了 5 个小时。有没有办法让它更快?比如,在做的时候mysqldump,它可以把INSERT语句分成更短的语句,这样mysql在恢复数据库时就不需要那么难地解析行了吗?

4

1 回答 1

2

如果有任何东西在使用时间,那将是 mysqld,这就是所有工作的实际工作。如果您要连接到远程 mysql 服务器,则 mysqld 将在该计算机上,而不是您的本地计算机上。

加速它的最直接方法是从表中删除所有键和索引,然后在加载数据后创建它们。在如此多的插入中保持所有内容的更新可能对服务器来说非常繁重,并且可能会导致您最终得到碎片化的索引。您可以期望在插入结束时创建索引需要一段时间,但这不会像在插入发生时让它们全部保持最新那样糟糕。

更好的解决方案是停止对该表使用 mysqldump 并切换到使用(与创建转储LOAD DATA INFILE的匹配)。SELECT ... INTO OUTFILE

您绝对最好的选择是只复制数据库文件,而不是尝试进行备份和恢复。我认为这仍然只适用于 MyISAM 数据库而不适用于 InnoDB,但如果最近事情发生了变化,其他人可以纠正我。

于 2010-06-09T02:16:13.743 回答