実行されるべきステートメントをサーバに送ろうと試みるとき、接続がダウンしているとわかると、MySQLクライアントライブラリはサーバのため、自動再接続を実施します。この場合、ライブラリはサーバーに再接続しようと一回試み、ステートメントを再び送ります。
自動再接続は自分の再接続コートを搭載する必要がないので、便利であるが、再接続が起こると、接続状態の幾つかの局面がリセットされ、それがアプリケーションに知らされません。接続が関係する状態は、次のように影響を与えます:
クティブな取引がすべてロールバックされ、オートコミットモードがリセットされます。
すべてのテーブルロックが解放されます。
すべてのTEMPORARY
テーブルが閉じ
(且つドロップ)されます。
セッション変数が対応する変数値に再初期設定されます。これはSET
NAMES
のようなステートメントによって暗黙にセットされる変数に影響を与えます。
ユーザー可変の設定が失われます。
準備されたステートメントがレリースされます。
HANDLER
変数が閉じられます。
LAST_INSERT_ID()
の値が0にリセットされます。
GET_LOCK()
を使って取得されたロックが解放されます。
接続のドロップを知り、(閉じるか状態情報の喪失に対して調整アクションを起こせるようにする)ことがアプリケーションにとって重要である場合、自動再接続が無効になっていることを確認してください。MYSQL_OPT_RECONNECT
オプションを使って、
mysql_options()
を呼び出すことによって、これを暗黙に実行することができます。
my_bool reconnect = 0; mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);
MySQLでは5.1、 自動再接続はデフォルトによって無効化されています。