大家好,我有一个运行 Apache/PHP 和 MySQL(CentOS)的 Web 服务器,MySQL 似乎每个月都会挂起一次。据我所知,有几个慢查询正在解决,但除此之外,我真的看不出 MySQL 会挂起的任何原因。我无法确定问题所在 - /var/log/mysqld.log 中没有显示任何内容,而且也有几个慢查询,但没有什么异常。崩溃时负载处于平均水平...
能否请您给我一些关于如何解决该问题的提示?我无法在我们的临时环境中重现该问题,所以我有点困惑。
答案1
这实际上不是一个答案,而是一个建议:安装一个带有 MySQL 插件的监控工具,如 Munin,并观察崩溃前和崩溃时的使用情况和内存、CPU、TCP 连接等。在类似情况下,这对我非常有价值。
答案2
您能定义“卡住”吗?也就是说,它是否死机了,无法响应任何查询?您甚至无法获取它正在运行的查询的进程列表吗?
或者它是否占用了大量的 CPU/内存并使服务器停止运行或不断崩溃,或者出现其他问题?
该进程处于什么状态?你能 strace 该守护进程吗?
可能需要更多地了解它正在做什么才能给出真正好的建议。
答案3
当这种情况发生时,您可以尝试对 mysqld 进程使用 strace 或 truss。
另一个解决方案可能是安排每周对数据库进行一次反弹,以防这不是一个坏查询,而是 MySQL 内部的缓慢泄漏。您的客户端是 24x7 全天候的吗?
答案4
您使用的是 InnoDB 还是 MyISAM 表?听起来您可能遇到过这样的情况:表在慢速查询上被锁定,导致后续查询堆积在队列中。但是,正如其他人提到的那样,如果没有看到 MySQL processlist (tee /tmp/outfile; show full processlist\G) ,就很难给出良好的响应。