もし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
オプションでスタートさせることができます。
自動再接続と再接続時の状態と効果に関する追加情報は、項23.2.13. 「自動再接続挙動の管理」を参照してください。