我正在尝试将大型 SQL 文件(> 2.5 Gb)恢复到 Windows 上的 MySQL 数据库中。
我无法编辑这些文件以在文件开头添加类似 SET autocommit=0;
的文本(这是缩短导入时间所必需的)。
我也无法使用 source
,因为它会输出到屏幕(非常慢)并且即使文件中有任何错误也会继续执行。例如:
mysql> CREATE DATABASE IF NOT EXISTS dbname;
mysql> USE dbname;
mysql> SET autocommit=0;
mysql> source file.sql;
mysql> COMMIT;
是否可以在导入仅适用于当前 session 的 SQL 文件之前和之后运行任意命令?我已经尝试了以下两种方法,但都无法在 Windows 上运行(在这两种情况下,第二个操作都被忽略):
mysql -u username -p -e "SET autocommit=0;" dbname < file.sql
或者,
mysql -u username -p < initial_commands.sql < file.sql
如果可能的话,我不想在每次执行此操作时都更改全局 autocommit
设置,然后必须记住将其更改回来(而且我不确定这是否会在没有最后的 COMMIT;
).
也许有一种方法可以使用 BEGIN ... COMMIT;
而不是关闭自动提交?
我很乐意接受必须做这种事情的人的任何建议!
最佳答案
我的回答晚了,但它可能对 future 的读者有所帮助。
我遇到了同样的问题。阅读时MySQL documentation on MySQL command options ,我发现您可以使用 --init-command
参数。
因此您的命令行将很简单:(-v
表示冗长并且是可选的)
mysql --init-command="SET autocommit=0;" -v < sql_file.sql
关于mysql - 导入非常大的 SQL 文件时的单次提交 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243320/