易语言

E2EE/mysql数据库报错 MySQL server has gone away

奶瓶 · 11月24日 · 2020年 · ·

使用mysql驱动时,发现用着用着会报如下错误

 [错误] [ADO数据库] 未指定的错误 >> [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.12]MySQL server has gone away

解决方法如下:

  1. 先查询数据库强制断开时间是多少
  2. e2ee在创建数据库时,填写【连接存活周期】参数小于强制断开时间。

查询mysql数据库强制断开时间(wait_timeout)

执行语句:show global variables like '%timeout'; 就能查到如下数据

connect_timeout 10
delayed_insert_timeout 300
have_statement_timeout YES
innodb_flush_log_at_timeout 1
innodb_lock_wait_timeout 120
innodb_rollback_on_timeout OFF
interactive_timeout 120
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 120

wait_timeout 是120秒,即mysql链接在无操作120秒后被自动关闭。

E2EE创建数据库连接池时填入【连接存活周期】参数

连接存活周期 参数 小于120
    参数名称为“连接存活周期”,数据类型为“整数型(int)”,所处语句为“创建”。注明:连接的最大存活周期(单位:秒)。如果连接超过了指定时间,则在下次获取时将回收并创建新的连接对象。如果为空或者0则使用默认周期(1小时)。如果为 -1 则不进行连接超时策略,只在状态为断开时自动重连(ADO的状态在物理连接断开或者静默断开时,状态位并不保证绝对可靠)。

当然你也可以修改数据库 wait_timeout 时间为70分钟

0 条回应