使用多线程导入.sql文件?

0 投票
2 回答
2082 浏览
提问于 2025-04-18 09:56

我有一个非常大的SQL文件(大约69GB)。我想把它导入到我的本地数据库里。所有的表都是基于InnoDB引擎的。


我尝试了标准的导入方法

mysql -u*** -p**** db_name < dump.sql

source /location/dump.sql

但是这些方法花费的时间太长了。


有没有什么方法可以在SQL或Python中创建多个线程,分别对应不同的表来导入它们?有没有其他方法可以加快这个过程?

2 个回答

0

你可以分析一下这个转储文件,然后尝试把插入的数据分到不同的表里,发送到不同的命令流中,但我觉得这样做可能不太值得。因为读取和重定向数据会增加处理的步骤,而且所有69GB的数据都得经过这一过程。

你主要的性能瓶颈在于这些数据都是一个流,所以所有的插入操作都是一个接一个地进行。你可以通过告诉数据库服务器不要立即把所有的提交记录写入日志来提高一些速度(也就是每个事务只需要写一次日志)。最简单的方法是:
mysql -u*** -p*** dbname
set session innodb_flush_log_at_trx_commit = 0;
source /location/dump.sql

不过,这样做并不会减少需要写入的数据总量,所以提速的效果也会有限。

0

你正在进行的恢复操作:

    mysql -u*** -p**** db_name < dump.sql

是最快的方式——如果用Python来做,你需要进行多次插入,这样会慢很多。

撰写回答