我有一个运行网站的服务器,其后端数据库是 MySQL(更具体地说是 5.5.37-MariaDB,适用于 x86_64 上的 debian-linux-gnu)。
有时它会停止接受连接,网站脚本会报告“无法连接到服务器”。我重新启动 MySQL 服务器后,它可以正常工作一段时间(最多几天)。
syslog、mysql.error 和 dmesg 没有显示相关错误。但是,慢查询日志显示,在某些时刻,查询执行速度越来越慢(从大约 1 秒开始,到 70 秒结束)。我重新启动 MySQL 后,相同的查询会立即执行。
我该如何修复它或者至少确定问题的原因?
答案1
当服务器挂起时strace -fp <pid of mysql>
这将显示哪个命令正在等待。它很可能是一个带有数字的读取
lsof -p <mysql pid>
将显示该数字的实际值。
如果日志中没有其他信息,如果不在服务器上就很难判断服务器何时出现故障
答案2
在 my.cnf 中启用慢查询日志记录来查找瓶颈查询的位置,并假设查看 max_used_connections 是否大于 max_connections。
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'max_used_connections';