我有一个网络应用程序,假定数据库上已启用autocommit,因此我不想在那里进行任何更改。但是,我找到的所有文档似乎只谈论在数据库上使用init_connect,即所有客户端连接的全局设置。
是否有一种方法可以仅在 Linux 命令行上运行 mysql 时设置 autocommit=0 (而无需每次键入)?
我有一个网络应用程序,假定数据库上已启用autocommit,因此我不想在那里进行任何更改。但是,我找到的所有文档似乎只谈论在数据库上使用init_connect,即所有客户端连接的全局设置。
是否有一种方法可以仅在 Linux 命令行上运行 mysql 时设置 autocommit=0 (而无需每次键入)?
SET autocommit = 0;
,然后进入交互模式,以便您可以运行任何命令。SET autocommit = 0;
的更多信息,请参见.. http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
我使用expect登录到命令行实用程序,在我的情况下它会启动ssh,连接到远程服务器,启动应用程序,输入我的用户名和密码,然后将控制权交给我。这样可以节省大量的打字时间 :)
http://linux.die.net/man/1/expect
Michael Hinds提供的Expect脚本spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
Expect非常强大,可以在这种情况下使生活变得更加轻松。
如果你想让脚本在不调用expect的情况下运行,请使用shebang行将其插入到你的脚本中(提示:使用which expect
查找您的expect可执行文件的位置)。
#! /usr/bin/expect
然后使用以下命令更改脚本的权限..
chmod 0744 myscript
然后调用脚本
./myscript
华盛顿特区
您可以通过以下三种方式来实现:
在执行 INSERT
操作之前,始终使用 BEGIN;
语句。这将关闭自动提交功能。一旦您希望将数据持久化到数据库中,则需要执行 COMMIT;
语句。
每次实例化数据库连接时,都需要使用 autocommit=0;
。
对于全局设置,可以在 MySQL 的 my.cnf
配置文件中添加 autocommit=0
变量。
autocommit=0
in ~/.my.cnf
does not work with mysql-5.7.33
, I get the following error: mysql: [ERROR] unknown variable 'autocommit=0'
- mariusminit-command='set autocommit=0'
的作用与另一个答案中描述的一样。 - mariusm看起来你可以将它添加到你的 ~/.my.cnf 文件中,但是需要作为初始化命令标志(init-command flag)的一个参数添加到 [client] 部分中,像这样:
[client]
init-command='set autocommit=0'
[mysql]
部分。如果在[client]
中使用_mysqldump_时出现未知变量错误,则需要进行测试。已在MySQL 5.6上进行了测试。 - Svilen这对于检查自动提交的状态非常有用;
select @@autocommit;
set @@autocommit=0;
。 - Farzan.S您是指mysql文本控制台吗?那么:
START TRANSACTION;
...
your queries.
...
COMMIT;
我建议这样做。
如果你想避免每次运行此类查询时都要输入这些内容,可以将以下内容添加到my.cnf文件的[mysqld]部分。
init_connect='set autocommit=0'
autocommit
。如果要关闭自动提交,请确保使用以下命令。在my.cnf
文件中设置如下:
[mysqld]
autocommit=0
在恢复时手动关闭自动提交,不如以包含所有必要语句的方式将MySQL数据转储到SQL文件中。
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参考文档
MySQL中自动提交变量的默认值为1; 要查看MySQL中autocommit的当前值,请使用以下命令 mysql> select @@autocommit; 如果您想关闭autocommit,请使用以下命令 mysql> set autocommit = 0;