MySQL客户端2006(CR_SERVER_GONE_ERROR)错误测试和优化方法
来源:互联网 发布:keep软件使用步骤 编辑:程序博客网 时间:2024/05/22 14:29
2014-11-28 wcdj
摘要:后台服务通常与MySQL交互使用长连接的方式,若会话超过默认8小时空闲则MySQL会对当前连接进行关闭,客户端此时再用此连接请求时就会返回2006:MySQLserver has gone away的错误提示,此类错误在某些场景下会影响用户体验,本文总结如何测试和优化此问题。
首先登录到MySQL查看设置会话超时的wait_timeout环境变量的数值。
mysql> show global variables like"%timeout%";
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 5 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 28800 |
+----------------------------+-------+
可见在没有心跳时MySQL主动断开的时间默认是8小时。
模拟客户端2006错误频发的场景,修改环境变量wait_timeout,可以选择以下方法中的一种来修改环境变量。
1. 在命令行上使用选项(-O wait_timeout=30)
2. 使用选项文件(优点:不需要每次运行程序时从命令行输入)
3. 用环境变量指定选项(set global wait_timeout=30;)
注意;命令行参数的优先级高于配置文件的优先级。
为了测试方便使用方法3,直接修改全局环境变量:
mysql> set global wait_timeout=30;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like"%timeout%";
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 5 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 30 |
+----------------------------+-------+
10 rows in set (0.00 sec)
修改wait_timeout后,可以验证在进行一笔请求交互后,MySQL会在connection达到配置的超时后主动close连接。
14:24:51.661203 IP 10.130.145.230.mysql> 172.27.35.35.42122: Flags [F.], seq 3165, ack 614, win 1724, options[nop,nop,TS val 1971514012 ecr 1071197207], length 0
0x0000: 4508 0034 342b 4000 3c069eea 0a82 91e6 E..44+@.<.......
0x0010: ac1b 2323 0cea a48a 946aef57 9714 794f ..##.....j.W..yO
0x0020: 8011 06bc f2ae 0000 0101080a 7582 ea9c ............u...
0x0030: 3fd9 2c17 ?.,.
14:24:51.700973 IP 172.27.35.35.42122 >10.130.145.230.mysql: Flags [.], ack 3166, win 91, options [nop,nop,TS val1071202262 ecr 1971514012], length 0
0x0000: 4508 0034 5aeb 4000 4006742a ac1b 2323 E..4Z.@.@.t*..##
0x0010: 0a82 91e6 a48a 0cea 9714794f 946a ef58 ..........yO.j.X
0x0020: 8010 005b e550 0000 0101080a 3fd9 3fd6 ...[.P......?.?.
0x0030: 7582 ea9c u...
后台服务在与MySQL建立连接完成后,可以采用定时器的方式周期地向MySQL上报心跳以防止连接被MySQL主动关闭。
void Timer::report()
{
time_t tNow= time(NULL);
if(tNow- DB_HEARTBEAT_INTERVAL_TIME>= m_tLastPingTime)
{
m_tLastPingTime= tNow;
db.ping();
}
return;
}
- MySQL客户端2006(CR_SERVER_GONE_ERROR)错误测试和优化方法
- mysql ICP和MRR性能优化测试
- 客户端网络优化方法
- unity内存优化和客户端表格读取方法内存比较
- unity内存优化和客户端表格读取方法内存比较
- mysql性能的检查和优化方法
- MySQL优化经验和方法汇总
- 安全性“依赖客户端验证”的测试方法和代码实现
- mysql优化测试
- MySQL 错误日志 测试
- MySQL服务器端&客户端常见错误
- mysql数据库大数据量的查询优化和分页测试
- mysql数据库大数据量的查询优化和分页测试
- WEB开发客户端优化方法
- Mysql简介和Mysql优化查询的方法
- 测试mktime和localtime_r性能及优化方法
- PC ACCESS 客户端测试出现错误
- Tomcat7和mysql连接池的配置方法和测试
- 20141128-OrCAD16.6输出有链接有属性信息的PDF
- 将科学计数法转为非科学计数法并显示小数位数
- C# - Static Members
- Python实现支持JSON存储和解析的对象
- 初学makefile
- MySQL客户端2006(CR_SERVER_GONE_ERROR)错误测试和优化方法
- 雷神3开方算法解析,游戏运行速度提高四倍。
- android Notification(通知) 的使用
- drools的JavaDialect异常
- Android UI系统控件进阶(一)之列表控件ListView详解
- 多线程编程——线程的同步(六)
- Linux策略路由
- POJ3616——Milking Time
- Bitmap 与 Drawable 之间的转换