MySQL クライアントの自動コミットをオフにするにはどうすればよいですか?
-
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 つの異なる方法で行います。
何かをする前に
INSERT
, 、常に発行しますBEGIN;
声明。これにより自動コミットがオフになります。次のことを行う必要があります。COMMIT;
データをデータベースに永続化したい場合。使用
autocommit=0;
データベース接続をインスタンス化するたびに。グローバル設定の場合は、
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
。
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をするのリファレンスを参照します