问题现象
通过宝塔面板自带的mysql,创建数据库,项目连接,或者本地数据库客户端连接,时不时出现连接超时中断。
问题根因
通过检查mysql配置发现:
net_read_timeout = 30(30秒) - 这是问题的根源!mysqlx_read_timeout = 30(30秒)
这两个参数导致mysql服务器在30秒内没有读取到完整的数据包就会超时断开连接,这就是应用报 sockettimeoutexception: read timed out 的原因。
宝塔面板修改步骤
方法一: 通过宝塔面板图形界面修改 (推荐)
步骤1: 登录宝塔面板
访问宝塔面板管理地址,使用管理员账号登录。
步骤2: 进入mysql管理
- 点击左侧菜单 “数据库”
- 找到mysql服务,点击 “设置” 或 “配置修改”
- 或者点击 “软件商店” → 找到 “mysql” → 点击 “设置”
步骤3: 修改配置文件
- 在mysql设置界面,点击 “配置修改” 或 “my.cnf”
- 在配置文件中找到
[mysqld]部分 - 查找并修改以下参数:
[mysqld] # 网络读取超时 - 从30秒改为300秒(5分钟) net_read_timeout = 300 # 网络写入超时 - 保持或增大 net_write_timeout = 600 # x协议读取超时 - 从30秒改为300秒 mysqlx_read_timeout = 300 # x协议写入超时 - 可选优化 mysqlx_write_timeout = 300 # 连接超时 - 可选优化,从10秒改为30秒 connect_timeout = 30
步骤4: 保存并重启mysql
- 点击 “保存”
- 回到mysql管理界面
- 点击 “重启” 或 “服务” → “重启”
- 等待重启完成(通常10-30秒)
步骤5: 验证配置
重启后,可以在mysql管理界面执行sql验证:
show variables like 'net_read_timeout'; show variables like 'net_write_timeout'; show variables like 'mysqlx_read_timeout';
应该显示:
net_read_timeout: 300net_write_timeout: 600mysqlx_read_timeout: 300
方法二: 通过ssh命令行修改 (备选)
如果宝塔面板界面不好操作,可以通过ssh:
# 1. ssh连接服务器 # 2. 编辑mysql配置文件 vi /etc/my.cnf # 或 vi /www/server/mysql/etc/my.cnf # 3. 在[mysqld]部分添加或修改 [mysqld] net_read_timeout = 300 net_write_timeout = 600 mysqlx_read_timeout = 300 # 4. 保存并退出 (:wq) # 5. 重启mysql /etc/init.d/mysqld restart # 或通过宝塔命令 bt restart mysqld
配置说明
关键参数解释
| 参数 | 当前值 | 建议值 | 说明 |
|---|---|---|---|
net_read_timeout | 30秒 | 300秒 | 核心参数: 服务器等待客户端发送数据的超时时间 |
net_write_timeout | 600秒 | 600秒 | 服务器发送数据到客户端的超时时间(已合理) |
mysqlx_read_timeout | 30秒 | 300秒 | x协议读取超时,与net_read_timeout同步 |
mysqlx_write_timeout | 60秒 | 300秒 | x协议写入超时,可选优化 |
connect_timeout | 10秒 | 30秒 | 连接建立超时,可选优化 |
wait_timeout | 28800秒 | 28800秒 | 空闲连接超时(8小时),已合理 |
interactive_timeout | 28800秒 | 28800秒 | 交互式连接超时(8小时),已合理 |
为什么是300秒?
- 与应用配置匹配: 应用的
sockettimeout=300000(5分钟) - 留有余地: 300秒 > 应用需求,确保数据库不会先超时
- 不会太大: 避免僵尸连接占用资源过久
修改后的验证步骤
1. 重启spring boot应用
修改mysql配置并重启后,重启你的spring boot应用:
# 停止应用 # 启动应用
2. 观察日志
应用启动后,观察日志30分钟:
成功标志:
- 没有
communicationsexception - 没有
sockettimeoutexception - 连接池正常工作
仍有问题:
- 继续出现超时错误 → 检查其他网络问题
3. 压力测试(可选)
使用jmeter或其他工具进行压力测试,确保高并发下连接稳定。
常见问题
q1: 修改配置后mysql无法启动?
a: 检查配置语法是否正确,确保 = 两边有空格,没有多余符号。
q2: 找不到配置文件?
a: 宝塔的mysql配置文件通常在:
/etc/my.cnf/www/server/mysql/etc/my.cnf/etc/mysql/my.cnf
q3: 修改后仍然超时?
a:
- 确认mysql已重启:
systemctl status mysqld - 确认配置已生效: 执行
show variables like 'net_read_timeout'; - 检查防火墙: 确保3306端口没有额外的超时限制
q4: 影响现有连接吗?
a: 修改配置需要重启mysql,会短暂断开现有连接。建议在低峰期操作,或提前通知使用者。
q5: 这个配置会影响性能吗?
a: 不会。net_read_timeout 只是超时时间,不会影响正常的查询性能,只是让慢查询或网络不稳定时更有容忍度。
其他优化建议(可选)
如果数据库访问仍然不稳定,可以考虑:
- 增大连接数上限 (如果连接数经常打满):
max_connections = 500
- 优化缓冲区大小:
max_allowed_packet = 64m innodb_buffer_pool_size = 2g # 根据服务器内存调整
- 启用慢查询日志,定位性能瓶颈:
slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2
总结
必须修改的参数:
net_read_timeout = 300mysqlx_read_timeout = 300
修改这两个参数后重启mysql,应该就能彻底解决连接超时问题。
到此这篇关于宝塔面板mysql配置修改及验证步骤的文章就介绍到这了,更多相关宝塔面板mysql配置修改内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论