我使用MySQL管理迁移工具包从数据库转储数据。其中一个表有超过500万行。当我尝试加载生成的数据文件时,会出现内存不足的问题。
有没有办法在X行之后强制提交?迁移工具包生成的脚本如下所示:
INSERT INTO mytable (`col1`, `col1`)
VALUES (823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
(823, 187.25),
最佳答案
对。这个大插入语句本质上是一个脚本。带一个编辑器;每隔几百行,插入一行COMMIT,然后开始一个新的insert…VALUES语句。
为了获得额外的信任,您可以编写一个简单的脚本,以编程方式将原始SQL语句重写为多个事务(如上所述)。你不想重复用手做这个。
没有可以激活的外部设置,因此您可以提交整个脚本,并在不更改脚本的情况下定期自动提交。
增加日志文件空间可能会提高限制,但我不指望它。面对现实:数据库根本不是用来处理几千行长的语句的。
我可能要做的是多次提交,但将这些内容推送到一个临时表或带有“temporary”标志的表中;然后运行一个或几个操作,使这些更改永久化。如果出现错误,您仍然可以重试或删除临时记录。