mysqlデータベースへのQt接続がタイムアウトしました

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=#
システム変数 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

  • SQL_ATTR_ACCESS_MODE
  • SQL_ATTR_LOGIN_TIMEOUT
  • SQL_ATTR_CONNECTION_TIMEOUT
  • SQL_ATTR_CURRENT_CATALOG
  • SQL_ATTR_METADATA_ID
  • SQL_ATTR_PACKET_SIZE
  • SQL_ATTR_TRACEFILE
  • SQL_ATTR_TRACE
  • SQL_ATTR_CONNECTION_POOLING
  • SQL_ATTR_ODBC_VERSION
  • CLIENT_COMPRESS
  • CLIENT_FOUND_ROWS
  • CLIENT_IGNORE_SPACE
  • CLIENT_ODBC
  • CLIENT_NO_SCHEMA
  • CLIENT_INTERACTIVE
  • UNIX_SOCKET
  • MYSQL_OPT_RECONNECT
  • MYSQL_OPT_CONNECT_TIMEOUT
  • MYSQL_OPT_READ_TIMEOUT
  • MYSQL_OPT_WRITE_TIMEOUT
  • SSL_KEY
  • SSL_CERT
  • SSL_CA
  • SSL_CAPATH
  • SSL_CIPHER
  • connect_timeout
  • オプション
  • tty
  • requiresl
  • サービス

DB2

OCI

TDS

  • SQL_ATTR_ACCESS_MODE
  • SQL_ATTR_LOGIN_TIMEOUT
  • OCI_ATTR_PREFETCH_ROWS
  • OCI_ATTR_PREFETCH_MEMORY

無し

SQLite

Interbase

 
  • QSQLITE_BUSY_TIMEOUT
  • QSQLITE_OPEN_READONLY
  • QSQLITE_OPEN_URI
  • QSQLITE_ENABLE_SHARED_CACHE
  • ISC_DPB_LC_CTYPE
  • ISC_DPB_SQL_ROLE_NAME
 

例:

 
  ...
  // 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()も参照してください

おすすめ

転載: blog.csdn.net/qingzhuyuxian/article/details/106273102