web-dev-qa-db-ja.com

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

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

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

32
Michael Hinds

おそらく最良の方法は、mysqlコマンドラインクライアントを起動し、コントロールを渡す前に、必要なSQLを自動的に実行するスクリプトを記述することです。

linuxには、「expect」と呼ばれるアプリケーションが付属しています。キーストロークを模倣するようにシェルと対話します。 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

Michael Hindsが提供するExpectスクリプト

spawn /usr/local/mysql/bin/mysql 
expect "mysql>" 
send "set autocommit=0;\r" 
expect "mysql>" interact

expectは非常に強力で、この場合のように人生をずっと楽にします。

expectを呼び出さずにスクリプトを実行する場合は、Shebang行を使用します

これをスクリプトの最初の行として挿入します(ヒント:which expectを使用して、期待する実行可能ファイルの場所を見つけます)

#! /usr/bin/expect

次に、スクリプトの権限を変更します。

chmod 0744 myscript

次に、スクリプトを呼び出します

./myscript

DC

25
DeveloperChris

これは、3つの異なる方法で行います。

  1. INSERTを実行する前に、常にBEGIN;ステートメントを発行してください。これにより、自動コミットがオフになります。データベースにデータを保存したい場合は、COMMIT;を実行する必要があります。

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

  3. グローバル設定の場合、MySQLのautocommit=0構成ファイルにmy.cnf変数を追加します。

22
nanda

〜/ .my.cnfに追加できるように見えますが、次のように[client]セクションのinit-commandフラグへの引数として追加する必要があります。

[client]
init-command='set autocommit=0'
9
rascalking

Mysqlテキストコンソールのことですか?次に:

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

私がお勧めするものです。

ただし、この種のクエリを実行する必要があるたびにこれを入力しないようにするには、my.cnfファイルの[mysqld]セクションに次を追加します。

init_connect='set autocommit=0'

ただし、これにより、すべてのクライアントでautocommitがオフに設定されます。

4
e4c5

これは、自動コミットのステータスを確認するのに役立ちます。

select @@autocommit;
2
PodTech.io

自動コミットをオフにするには、以下のコマンドを使用してください。以下にmy.cnfファイル:

    [mysqld]
    autocommit=0
1
Ram

復元時に自動コミットを手動でオフにする代わりに、必要なすべてのステートメントを直接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のリファレンス を参照してください

0
Jpsy