データベースで自動コミットがオンになっていることを前提に書かれた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
私はコマンドラインユーティリティにログインすることを期待しています。私の場合は、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
これは、3つの異なる方法で行います。
INSERT
を実行する前に、常にBEGIN;
ステートメントを発行してください。これにより、自動コミットがオフになります。データベースにデータを保存したい場合は、COMMIT;
を実行する必要があります。
データベース接続をインスタンス化するたびにautocommit=0;
を使用します。
グローバル設定の場合、MySQLのautocommit=0
構成ファイルにmy.cnf
変数を追加します。
〜/ .my.cnfに追加できるように見えますが、次のように[client]セクションのinit-commandフラグへの引数として追加する必要があります。
[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のリファレンス を参照してください