以下内容来源于Mysql官网操作手册
https://dev.mysql.com/doc/refman/8.0/en/preface.html
MySQL server has gone away错误的最常见原因是服务器超时并关闭了连接。
对于这种情况,通常会获得以下错误代码(所获得的错误代码取决于操作系统)
错误代码及描述
CR_SERVER_GONE_ERROR:客户端无法向服务器发送问题。
CR_SERVER_LOST:客户端写入服务器时并没有收到错误,但是没有得到问题的完整答案(或任何答案)。
默认情况下,Mysql如果没有任何操作,服务器将在8小时后关闭连接。
可在启动mysqld时通过设置wait_timeout 的值来更改时间限制。
- wait_timeout
命令行格式:–wait-timeout=#
类型:Integer
默认值:28800
最小值:1
最大值(其他系统):31536000
最大值(Windows):2147483
服务器在关闭非交互式连接之前等待的时间(秒)。
在线程启动时,session的 wait_timeout值是根据全局的wait_timeout值 interactive_timeout初始化时的值来定义的,具体取决于客户端的类型(在 mysql_real_connect()使用CLIENT_INTERACTIVE选项)。
- interactive_timeout
命令行格式:–interactive-timeout=#
类型:Integer
默认值:28800
最小值:1
关闭交互式连接之前服务器等待的时间(秒)。
交互式客户端定义为在 mysql_real_connect()使用CLIENT_INTERACTIVE选项。
Mysql事务超时、自动重连等设置
- slave_transaction_retries
命令行格式:–slave-transaction-retries=#
类型:Integer
默认值:10
最小值:0
最大值(64-bit platforms):18446744073709551615
最大值(32-bit platforms):4294967295
对于单线程或多线程,可通过设置SQL从线程的最大次数,在停止前自动重试连接失败的事务。
设置此变量将立刻对所有复制通道(包括正在运行的通道)生效。
此变量默认值为10。将变量设置为0将禁用事务的自动重试。
- innodb_lock_wait_timeout
命令行格式:–innodb-lock-wait-timeout=#
类型:Integer
默认值:50
最小值:1
最大值:1073741824
InnoDB 事务在放弃之前等待行锁定的时间长度(秒)。默认值为50秒。
发出以下错误前,尝试访问被另一个InnoDB事务锁定的行的事务最多等待此时间(秒),才能发出对该行的写操作访问权限。
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
发生锁定等待超时,将回滚当前语句 (不是整个事务)。
要使整个事务回滚,可使用–innodb-rollback-on-timeout 启动服务器 。
对于高交互程序或OLTP系统,可以降低此值,以快速显示用户反馈或后续处理队列中的更新操作。
可为长时间运行的后端操作增加此值,例如:数据仓库中等待其他大型插入或更新操作的转换步骤。
innodb_lock_wait_timeout适用于 InnoDB行锁。
MySQL 表锁不会在InnoDB内部发生并且此超时不适用于表锁。
- innodb_rollback_on_timeout
命令行格式:–innodb-rollback-on-timeout[={OFF|ON}]
类型:Boolean
默认值:OFF
InnoDB 默认情况下,仅回滚事务超时状态时的最后一条语句。
如果 --innodb-rollback-on-timeout被指定开启,则事务超时会引起 InnoDB中止并回滚整个事务。
注意
如果启动事务的语句是 START TRANSACTION或BEGIN 语句,则回滚不会取消该语句。
导致更多的SQL语句成为事件中的一部分,直到COMMIT, ROLLBACK或其他导致隐式提交的SQL语句出现。