Se agotó el tiempo de espera de la conexión Qt a la base de datos mysql

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

Propiedad Valor
Formato de línea de comandos --wait-timeout=#
Variable de sistema wait_timeout
Alcance Sesión global
Dinámica si
SET_VAR Se aplica una sugerencia No
Tipo Entero
Valor por defecto 28800
Valor mínimo 1
Valor máximo (otros) 31536000
Valor máximo (Windows) 2147483

La cantidad de segundos que el servidor espera la actividad en una conexión no interactiva antes de cerrarla.

En el inicio del hilo, el wait_timeout valor de la sesión  se inicializa a partir del wait_timeout valor global  o del interactive_timeout valor global  , según el tipo de cliente (como se define en la  CLIENT_INTERACTIVE opción de conexión a  mysql_real_connect()). Vea también  interactive_timeout.

 

28.7.27 Control de reconexión automática API C

La biblioteca cliente de MySQL puede realizar una reconexión automática al servidor si encuentra que la conexión está inactiva cuando intenta enviar una declaración al servidor para que se ejecute . Si la reconexión automática está habilitada, la biblioteca intenta una vez volver a conectarse al servidor y enviar la declaración nuevamente.

La reconexión automática está deshabilitada de forma predeterminada.

Si es importante que su aplicación sepa que la conexión se ha interrumpido (para que pueda salir o tomar medidas para ajustar la pérdida de información de estado), asegúrese de que la reconexión automática esté desactivada. Para asegurar esto, llame  mysql_options() con la  MYSQL_OPT_RECONNECT opción:

bool reconnect = 0;
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);

Si la conexión se ha interrumpido, el efecto de  mysql_ping() depende del estado de reconexión automática. Si la reconexión automática está habilitada,  mysql_ping() realiza una reconexión. De lo contrario, devuelve un error.

Algunos programas cliente pueden proporcionar la capacidad de controlar la reconexión automática. Por ejemplo,  mysql se  vuelve a conectar de forma predeterminada, pero la  --skip-reconnect opción se puede utilizar para suprimir este comportamiento.

Si se produce una reconexión automática (por ejemplo, como resultado de una llamada  mysql_ping()), no hay ninguna indicación explícita de ello. Para verificar la reconexión, llame mysql_thread_id() para obtener el identificador de conexión original antes de llamar  mysql_ping(), luego mysql_thread_id() vuelva a llamar  para ver si el identificador cambió.

La reconexión automática puede ser conveniente porque no necesita implementar su propio código de reconexión, pero si ocurre una reconexión, varios aspectos del estado de la conexión se restablecen en el lado del servidor y su aplicación no será notificada.

El estado relacionado con la conexión se ve afectado de la siguiente manera:

  • Las transacciones activas se revierten y se restablece el modo de confirmación automática.

  • Se liberan todos los bloqueos de la mesa.

  • Todas las  TEMPORARY mesas están cerradas (y descartadas).

  • Las variables del sistema de sesión se reinicializan a los valores de las variables del sistema global correspondientes, incluidas las variables del sistema que se establecen implícitamente mediante declaraciones como  SET NAMES.

  • Se pierden los ajustes de las variables de usuario.

  • Se emiten declaraciones preparadas.

  • HANDLER las variables están cerradas.

  • El valor de  LAST_INSERT_ID() se restablece a 0.

  • GET_LOCK() Se liberan los bloqueos adquiridos con  .

  • Se threads pierde la asociación del cliente con la fila de la tabla Performance Schema  que determina la instrumentación del subproceso de conexión. Si el cliente se vuelve a conectar después de una desconexión, la sesión se asocia con una nueva fila en la  threads tabla y el estado de supervisión del hilo puede ser diferente. Consulte la  Sección 26.12.19.5, “La tabla de subprocesos” .

Si se produce la reconexión,  se vuelve a ejecutar cualquier instrucción SQL especificada llamando  mysql_options() con la  MYSQL_INIT_COMMANDopción.

Si la conexión se cae, es posible que la sesión asociada con la conexión en el lado del servidor aún se esté ejecutando si el servidor aún no ha detectado que el cliente ya no está conectado. En este caso, los bloqueos mantenidos por la conexión original todavía pertenecen a esa sesión, por lo que es posible que desee eliminarlo llamando  mysql_kill().

 

void QSqlDatabase :: setConnectOptions (const QString & options = QString ())

Establece opciones específicas de la base de datos. Esto debe hacerse antes de que se abra la conexión o no tendrá ningún efecto (o puede cerrar () la conexión, llamar a esta función y abrir () la conexión nuevamente).

El formato de la cadena de opciones es una lista separada por punto y coma de nombres de opciones o pares opción = valor. Las opciones dependen del cliente de base de datos utilizado:

 

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_INTERACTIVO
  • 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
  • opciones
  • tty
  • requiressl
  • Servicio

DB2

OCIO

TDS

  • SQL_ATTR_ACCESS_MODE
  • SQL_ATTR_LOGIN_TIMEOUT
  • OCI_ATTR_PREFETCH_ROWS
  • OCI_ATTR_PREFETCH_MEMORY

ninguna

SQLite

Interbase

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

Ejemplos:

 
  ...
  // 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
      ...
  }
 

Consulte la documentación de la biblioteca cliente para obtener más información sobre las diferentes opciones.

Consulte también connectOptions ().

Supongo que te gusta

Origin blog.csdn.net/qingzhuyuxian/article/details/106273102
Recomendado
Clasificación