如何关闭 MySQL 客户端的自动提交?
-
21-09-2019 - |
题
我有一个网络应用程序,它是在假设数据库上打开自动提交的情况下编写的,因此我不想在那里进行任何更改。然而,我能找到的所有文档似乎都只讨论在数据库上使用 init_connect ,即所有客户端连接的全局设置。
有没有办法在Linux命令行上运行mysql时设置autocommit=0(而不必每次都输入)?
解决方案
也许最好的方法是编写一个启动mysql命令行客户端,然后自动运行任何你想要的SQL它移交控制到你面前的脚本。
Linux带有称为“期望”的应用程序。它用这样的方式来模仿你的击键外壳相互作用。它可以被设置为启动mysql,等待你输入密码。运行进一步的命令如SET autocommit = 0;
然后进入互动模式,这样可以运行所需的任何命令。
以获得更多关于该命令SET autocommit = 0;
看到.. HTTP ://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
我用期待登录到我的情况下,命令行实用程序启动SSH,连接到远程服务器,启动应用程序输入自己的用户名和密码,然后把控制权给我。节省了我打字的堆:)
http://linux.die.net/man/1/expect
DC
期待通过迈克尔Hinds的提供的脚本
spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
想到的是非常强大的,可以使生活变得更容易,因为在这种情况下。
如果你想使脚本运行,而无需调用期望使用家当行
插入此为脚本中的第一行(提示:使用which expect
找到你的期望可执行文件位置)
#! /usr/bin/expect
然后更改脚本的权限与..
chmod 0744 myscript
然后调用脚本
./myscript
DC
其他提示
您可以通过 3 种不同的方式执行此操作:
在你做之前
INSERT
, ,总是发出一个BEGIN;
陈述。这将关闭自动提交。你需要做一个COMMIT;
一旦您希望将数据保留在数据库中。使用
autocommit=0;
每次实例化数据库连接时。对于全局设置,添加
autocommit=0
你的变量my.cnf
MySQL 中的配置文件。
看起来可以将其添加到〜/ .my.cnf,但它需要在[客户]部分被添加作为参数给init-命令标志,像这样:
[client]
init-command='set autocommit=0'
你的意思是MySQL的文本控制台?然后:
START TRANSACTION;
...
your queries.
...
COMMIT;
是我的建议。
不过,如果你想避免这种每次你需要运行此类查询的时间打字,以下内容添加到您的my.cnf文件中的[mysqld]部分。
init_connect='set autocommit=0'
此将设置autocommit
为断开为每个客户端虽然。
这是有用的,以检查自动提交的状态;
select @@autocommit;
有关自动提交关闭然后使用下面的命令是肯定的。在my.cnf
文件设置如下:
[mysqld]
autocommit=0
而不是在还原时,你已经可以转储在包含所有必要的陈述权到您的SQL文件的方式你的MySQL数据手动切换自动提交设置。
有mysqldump的命令行参数是--no-autocommit
。你也可以考虑增加--opt
这台其他参数的组合,以加快恢复操作。
下面是一个完整的mysqldump命令行的示例,因为我使用它,含有--no-autocommit
和--opt
:
mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names MyDbName > dump.sql
有关这些参数的细节见的mysqldump的中参考