mysql - 导入非常大的 SQL 文件时的单次提交 (MySQL)

标签 mysql windows mariadb

我正在尝试将大型 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/

相关文章:

Windows 10 Mobile - 无法隐藏状态栏(StatusBar 在上下文中不存在)

java - 当项目部署在 tomcat 上时 JDBC 数据源不工作

docker - phpmyadmin 无法使用 docker-compose : Packets out of order 连接到 mariadb

mysql - 使用 GROUP BY 根据 order_ID 对订单信息(数量、order_total 等)进行分组

c++ - 如果我创建了一个进程,是否意味着我总能终止它?

c++ - Qt Creator C1083 : Cannot open include file: 'cstddef' : No such file or directory

mysql - MariaDB/MySQL 从选择查询插入表,但重复键使用选择查询中的数据

mysql - 获取MySQL中每月的费用总额

mysql - 表名被指定多次

mysql - 在字符串中查找精确匹配的正则表达式可以在其他地方使用,但不能在 MySql 查询上使用