MySQL クライアントの自動コミットをオフにするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2280465

  •  21-09-2019
  •  | 
  •  

質問

データベースで自動コミットがオンになっているという前提で作成された Web アプリがあるため、そこには変更を加えたくありません。ただし、私が見つけることができるすべてのドキュメントは、データベースでの init_connect の使用についてのみ説明しているようです。すべてのクライアント接続のグローバル設定。

Linux コマンドラインで mysql を実行するときだけ (毎回入力する必要がなく) autocommit=0 を設定する方法はありますか?

役に立ちましたか?

解決

おそらく最良の方法は、mysqlのコマンドラインクライアントを開始し、自動的にあなたがそれの前にしたいあなたにコントロールの上に手をSQL何でも実行するスクリプトを書くことです。

Linuxは、「期待する」と呼ばれるアプリケーションが付属しています。それは模倣あなたのキーストロークするようなAの方法で、シェルと対話します。あなたのパスワードを入力するのを待ち、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

期待マイケル・ハインズが提供するスクリプト

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 つの異なる方法で行います。

  1. 何かをする前に INSERT, 、常に発行します BEGIN; 声明。これにより自動コミットがオフになります。次のことを行う必要があります。 COMMIT; データをデータベースに永続化したい場合。

  2. 使用 autocommit=0; データベース接続をインスタンス化するたびに。

  3. グローバル設定の場合は、 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を追加することを検討してください。

私は--no-autocommit--optを含む、それを使用するようここで完全にmysqldumpコマンドラインの例です。

mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names  MyDbName  >  dump.sql

これらのパラメータの詳細については、mysqldumpをするのリファレンスを参照します

scroll top