40

我有一个 Web 应用程序,它假设自动提交已在数据库上打开,所以我不想在那里进行任何更改。然而,我能找到的所有文档似乎都只谈论在数据库上使用 init_connect,即所有客户端连接的全局设置。

有没有办法在 Linux 命令行上运行 mysql 时设置 autocommit=0 (无需每次都输入)?

4

8 回答 8

30

也许最好的方法是编写一个脚本来启动 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

直流

于 2010-02-22T01:01:10.387 回答
27

您可以通过 3 种不同的方式执行此操作:

  1. 在你做之前INSERT,总是发表一个BEGIN;声明。这将关闭自动提交。COMMIT;一旦您希望将数据保留在数据库中,您将需要执行一次。

  2. autocommit=0;每次实例化数据库连接时使用。

  3. 对于全局设置,在 MySQLautocommit=0的配置文件中添加一个变量。my.cnf

于 2010-02-21T06:47:58.740 回答
13

看起来您可以将其添加到 ~/.my.cnf,但需要将其作为参数添加到 [client] 部分中的 init-command 标志,如下所示:

[client]
init-command='set autocommit=0'
于 2012-07-31T18:44:40.170 回答
5

这对于检查自动提交的状态很有用;

select @@autocommit;
于 2016-10-27T17:30:16.377 回答
4

你的意思是mysql文本控制台吗?然后:

START TRANSACTION;
  ...
  your queries.
  ...
COMMIT;

是我推荐的。

但是,如果您想避免每次需要运行此类查询时都输入此内容,请将以下内容添加到 my.cnf 文件的 [mysqld] 部分。

init_connect='set autocommit=0'

不过,这将对autocommit每个客户都关闭。

于 2010-02-18T15:22:48.467 回答
3

对于自动提交关闭,请确定使用以下命令。my.cnf在文件中设置如下:

    [mysqld]
    autocommit=0
于 2018-03-20T13:07:53.327 回答
0

mysql 中自动提交变量的默认值为1;要查看 mysql 中 autocommit 的当前值,请使用命令 mysql> select @@autocommit; 然后如果你想关闭自动提交使用命令 mysql> set autocommit = 0;

于 2021-11-18T06:12:53.647 回答
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 的参考

于 2016-09-30T10:37:41.553 回答