mysql> show variables like '%timeout';
+-----------------------------------+----------+
| Variable_name | Value |
+-----------------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| mysqlx_connect_timeout | 30 |
| mysqlx_idle_worker_thread_timeout | 60 |
| mysqlx_interactive_timeout | 28800 |
| mysqlx_port_open_timeout | 0 |
| mysqlx_read_timeout | 30 |
| mysqlx_wait_timeout | 28800 |
| mysqlx_write_timeout | 60 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| wait_timeout | 28800 |
+-----------------------------------+----------+
20 rows in set, 1 warning (0.00 sec)
enum mysql_option {
MYSQL_OPT_CONNECT_TIMEOUT,
MYSQL_OPT_COMPRESS,
MYSQL_OPT_NAMED_PIPE,
MYSQL_INIT_COMMAND,
MYSQL_READ_DEFAULT_FILE,
MYSQL_READ_DEFAULT_GROUP,
MYSQL_SET_CHARSET_DIR,
MYSQL_SET_CHARSET_NAME,
MYSQL_OPT_LOCAL_INFILE,
MYSQL_OPT_PROTOCOL,
MYSQL_SHARED_MEMORY_BASE_NAME,
MYSQL_OPT_READ_TIMEOUT,
MYSQL_OPT_WRITE_TIMEOUT,
MYSQL_OPT_USE_RESULT,
MYSQL_REPORT_DATA_TRUNCATION,
MYSQL_OPT_RECONNECT,
MYSQL_PLUGIN_DIR,
MYSQL_DEFAULT_AUTH,
MYSQL_OPT_BIND,
MYSQL_OPT_SSL_KEY,
MYSQL_OPT_SSL_CERT,
MYSQL_OPT_SSL_CA,
MYSQL_OPT_SSL_CAPATH,
MYSQL_OPT_SSL_CIPHER,
MYSQL_OPT_SSL_CRL,
MYSQL_OPT_SSL_CRLPATH,
MYSQL_OPT_CONNECT_ATTR_RESET,
MYSQL_OPT_CONNECT_ATTR_ADD,
MYSQL_OPT_CONNECT_ATTR_DELETE,
MYSQL_SERVER_PUBLIC_KEY,
MYSQL_ENABLE_CLEARTEXT_PLUGIN,
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
MYSQL_OPT_MAX_ALLOWED_PACKET,
MYSQL_OPT_NET_BUFFER_LENGTH,
MYSQL_OPT_TLS_VERSION,
MYSQL_OPT_SSL_MODE,
MYSQL_OPT_GET_SERVER_PUBLIC_KEY,
MYSQL_OPT_RETRY_COUNT,
MYSQL_OPT_OPTIONAL_RESULTSET_METADATA,
MYSQL_OPT_SSL_FIPS_MODE,
MYSQL_OPT_TLS_CIPHERSUITES,
MYSQL_OPT_COMPRESSION_ALGORITHMS,
MYSQL_OPT_ZSTD_COMPRESSION_LEVEL
};
プロパティ | 値 |
---|---|
コマンドライン形式 | --wait-timeout=# |
システム変数 | wait_timeout |
範囲 | グローバル、セッション |
動的 | はい |
SET_VAR ヒントが適用されます |
番号 |
タイプ | 整数 |
デフォルト値 | 28800 |
最小値 | 1 |
最大値(その他) | 31536000 |
最大値(Windows) | 2147483 |
サーバーが非対話型接続でアクティビティを待機してから閉じるまでの秒数。
スレッドの起動時に、セッション wait_timeout
値は 、クライアントのタイプ( への接続オプションで定義されている)に応じて、グローバルwait_timeout
値またはグローバル値 から初期化 interactive_timeout
され CLIENT_INTERACTIVE
ます mysql_real_connect()
。も参照してください interactive_timeout
。
28.7.27 CAPI自動再接続制御
MySQLクライアントライブラリは、実行するサーバーにステートメントを送信しようとしたときに接続がダウンしていることを検出すると、サーバーへの自動再接続を実行できます。自動再接続が有効になっている場合、ライブラリはサーバーへの再接続を1回試行し、ステートメントを再送信します。
自動再接続はデフォルトで無効になっています。
接続が切断されたことをアプリケーションが認識することが重要な場合(終了するか、状態情報の損失を調整するためのアクションを実行できるようにするため)、自動再接続が無効になっていることを確認してください。これを確実にするにはmysql_options()
、次のMYSQL_OPT_RECONNECT
オプションを指定して 呼び出し ます。
bool reconnect = 0;
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);
接続がダウンした場合の影響は mysql_ping()
、自動再接続の状態によって異なります。自動再接続が有効になっている場合 mysql_ping()
は、再接続を実行します。それ以外の場合は、エラーを返します。
一部のクライアントプログラムは、自動再接続を制御する機能を提供する場合があります。たとえば、 mysql はデフォルトで再接続しますが、この --skip-reconnect
オプションを使用してこの動作を抑制することができます。
自動再接続が発生した場合(たとえば、を呼び出した結果 mysql_ping()
)、それを明示的に示すことはありません。再接続を確認するには、を呼び出してmysql_thread_id()
から元の接続識別子を取得してから、 もう一度mysql_ping()
呼び出し mysql_thread_id()
て識別子が変更されたかどうかを確認します。
自動再接続は、独自の再接続コードを実装する必要がないため便利ですが、再接続が発生した場合、接続状態のいくつかの側面がサーバー側でリセットされ、アプリケーションに通知されません。
接続関連の状態は次のように影響を受けます。
-
アクティブなトランザクションはすべてロールバックされ、自動コミットモードがリセットされます。
-
すべてのテーブルロックが解除されます。
-
すべての
TEMPORARY
テーブルが閉じられます(そして削除されます)。 -
セッションシステム変数は、などのステートメントによって暗黙的に設定されるシステム変数を含む、対応するグローバルシステム変数の値に再初期化され
SET NAMES
ます。 -
ユーザー変数の設定は失われます。
-
準備されたステートメントがリリースされます。
-
HANDLER
変数は閉じています。 -
の値は
LAST_INSERT_ID()
0にリセットされます。 -
で取得したロックが解除
GET_LOCK()
されます。 -
クライアントと、
threads
接続スレッドのインストルメンテーションを決定するパフォーマンススキーマ テーブルの行との関連付けは失われます。切断後にクライアントが再接続すると、セッションはthreads
テーブルの新しい行に関連付けられ 、スレッドの監視状態が異なる場合があります。セクション26.12.19.5「スレッドテーブル」を参照してください 。
再接続が発生するmysql_options()
と、MYSQL_INIT_COMMAND
オプションを指定して呼び出すことで 指定されたSQLステートメント が再実行されます。
接続が切断された場合、クライアントが接続されていないことをサーバーがまだ検出していなければ、サーバー側の接続に関連付けられたセッションが引き続き実行されている可能性があります。この場合、元の接続によって保持されているロックはすべてそのセッションに属しているため、を呼び出してロックを解除することをお勧めします mysql_kill()
。
void QSqlDatabase :: setConnectOptions(const QString&options = QString())
データベース固有のオプションを設定します。これは、接続を開く前に実行する必要があります。そうしないと、効果がありません(または、接続を閉じ()、この関数を呼び出して、接続を再度開く()ことができます)。
オプション文字列の形式は、オプション名またはオプション=値のペアのセミコロン区切りのリストです。オプションは、使用するデータベースクライアントによって異なります。
ODBC |
MySQL |
PostgreSQL |
|
|
|
DB2 |
OCI |
TDS |
|
|
無し |
Interbase |
||
|
|
例:
...
// MySQL connection
db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the server
if (!db.open()) {
db.setConnectOptions(); // clears the connect option string
...
}
...
// PostgreSQL connection
db.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connections
if (!db.open()) {
db.setConnectOptions(); // clear options
...
}
...
// ODBC connection
db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC options
if (!db.open()) {
db.setConnectOptions(); // don't try to set this option
...
}
さまざまなオプションの詳細については、クライアントライブラリのドキュメントを参照してください。
connectOptions()も参照してください。