我有一个 Web 应用程序,它假设自动提交已在数据库上打开,所以我不想在那里进行任何更改。然而,我能找到的所有文档似乎都只谈论在数据库上使用 init_connect,即所有客户端连接的全局设置。
有没有办法在 Linux 命令行上运行 mysql 时设置 autocommit=0 (无需每次都输入)?
我有一个 Web 应用程序,它假设自动提交已在数据库上打开,所以我不想在那里进行任何更改。然而,我能找到的所有文档似乎都只谈论在数据库上使用 init_connect,即所有客户端连接的全局设置。
有没有办法在 Linux 命令行上运行 mysql 时设置 autocommit=0 (无需每次都输入)?
也许最好的方法是编写一个脚本来启动 mysql 命令行客户端,然后在将控制权交给您之前自动运行您想要的任何 sql。
linux 带有一个名为“expect”的应用程序。它以模仿您的击键的方式与外壳交互。可以设置启动mysql,等你输入密码。运行进一步的命令,例如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 提供的脚本
spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
expect 非常强大,可以让生活变得更轻松,就像在这种情况下一样。
如果你想让脚本运行而不调用期望使用 shebang 行
将此作为脚本的第一行插入(提示:用于which expect
查找预期可执行文件的位置)
#! /usr/bin/expect
然后使用..更改脚本的权限
chmod 0744 myscript
然后调用脚本
./myscript
直流
您可以通过 3 种不同的方式执行此操作:
在你做之前INSERT
,总是发表一个BEGIN;
声明。这将关闭自动提交。COMMIT;
一旦您希望将数据保留在数据库中,您将需要执行一次。
autocommit=0;
每次实例化数据库连接时使用。
对于全局设置,在 MySQLautocommit=0
的配置文件中添加一个变量。my.cnf
看起来您可以将其添加到 ~/.my.cnf,但需要将其作为参数添加到 [client] 部分中的 init-command 标志,如下所示:
[client]
init-command='set autocommit=0'
这对于检查自动提交的状态很有用;
select @@autocommit;
你的意思是mysql文本控制台吗?然后:
START TRANSACTION;
...
your queries.
...
COMMIT;
是我推荐的。
但是,如果您想避免每次需要运行此类查询时都输入此内容,请将以下内容添加到 my.cnf 文件的 [mysqld] 部分。
init_connect='set autocommit=0'
不过,这将对autocommit
每个客户都关闭。
对于自动提交关闭,请确定使用以下命令。my.cnf
在文件中设置如下:
[mysqld]
autocommit=0
mysql 中自动提交变量的默认值为1;要查看 mysql 中 autocommit 的当前值,请使用命令 mysql> select @@autocommit; 然后如果你想关闭自动提交使用命令 mysql> set 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 的参考