もし mysql クライアントが、ステートメントの送信中にサーバーとの接続が遮断された場合、直ちに自動的に再接続し、ステートメントの送信を再度試みます。ただし、mysql が再接続に成功しても、最初の接続が遮断された時点で前セッションオブジェクトと設定は失われています。この中には、一時テーブル、自動コミットモード、ユーザー定義変数やセッション変数も含まれています。加えて、現トランザクションロールバックも。この動作は危険な場合があります。たとえば、以下の例ではサーバーはユーザーの了解なしに、最初のステートメントと二番目のステートメントの間に終了し、リスタートさせられています。
mysql>SET @a=1;
Query OK, 0 rows affected (0.05 sec) mysql>INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: test Query OK, 1 row affected (1.30 sec) mysql>SELECT * FROM t;
+------+ | a | +------+ | NULL | +------+ 1 row in set (0.05 sec)
@a
ユーザー変数は接続と共に失われ、再接続語は定義されていません。接続が失われた際に、mysql
がエラーで終了することが望ましい場合、mysql
クライアントを--skip-reconnect
オプションでスタートさせることができます。
自動再接続と再接続時の状態と効果に関する追加情報は、Controlling Automatic Reconnection Behaviorを参照してください。