我有一个 SQL 文件,其中包含两个表,总共大约 600,000 行。昨天,我尝试将文件导入到我在 Fedora 16 上的 MySQL 数据库中,导入文件花了 2 个多小时。在我的 Windows PC 上花了 7 分钟。我的 Linux 和 Windows 机器具有完全相同的硬件。我的几个朋友也尝试过,他们也有类似的经历。
我们使用的命令是:mysql -u root database_name < sql_file.sql
.
为什么速度会有这么大的差异?
我敢打赌,Fedora 16 尊重事务/同步语义,而 Windows 没有。如果你算一下,两小时内 600,000 次更新是每分钟 5,000 次。这与磁盘的旋转速度在同一个数量级。
您可以尝试添加SET autocommit=0;
到导入文件的开头和COMMIT;
结尾。请参阅此页面了解更多信息。
为什么不将 .sql 文件作为BULK INSERT
选项导出并导入,在使用 mysqldump 进行备份时尝试这些选项
--extended-insert
: 使用多行插入语句
--quick
:不要缓冲行数据,如果表很大的话很好
注意:max_allowed_packet
在生成 .sql 文件之前,请确保在 my.cnf 文件中增加 =32M 或更多的值。