过去 4 天内,网站在夜间某个时间点出现两次宕机,因为服务器无法连接到数据库。此时,其他所有程序仍在运行(apache 等),只是数据库已死。
当我以 root 身份登录 ssh 进行调查时,我发现我在任何地方都只具有读取权限,我怀疑这就是导致 mysql 服务器死亡的原因。
我检查了 mysql 日志、系统日志,基本上是我能找到的所有日志文件,在问题开始的时候(甚至在一整天内),没有任何迹象表明有错误。就像是刚打开一个开关,然后我重启系统,一切又恢复正常了……直到几天后?
上次发生这种情况时有 2G 的可用内存,第一次发生时有 1.5G 可用内存。CPU 使用率最低(< 30%)。
有任何想法吗?
答案1
磁盘错误是导致“我在所有地方都只具有读取权限”情况的一个可能原因。某些类型的硬件或内核级磁盘故障可能会导致文件系统不一致和损坏,因此当内核检测到此类故障时,它会保护性地强制文件系统进入“只读”模式。如果包含根文件系统的磁盘出现故障,则任何试图写入磁盘的内容都会开始出现权限错误。不需要写入磁盘的程序(如 Apache 或 SSHd)可能会继续正常工作。
下次数据库发生故障时,请在重新启动之前检查内核日志消息缓冲区,看是否存在任何磁盘错误迹象。您可能必须使用“dmesg”命令,因为如果您的“/var/log”目录是根文件系统的一部分,则 syslog 守护程序将无法将错误消息写入磁盘上的“/var/log/messages”文件。此外,重新启动时内核日志缓冲区的内容将丢失,因此您可能需要使用“ssh”或“scp”将这些数据复制到其他地方。
答案2
我也遇到过同样的问题。看起来文件系统被毫无理由地设置为只读,日志文件中(显然)没有任何内容。
我们花了几个月的时间才与“我们不支持 Linux”硬件供应商解决这个问题。
我最终在 RAID 控制器上发现了一个固件错误。当它遇到错误时,它会降低阵列的性能,并且 RAID 顶部的 ext3 文件系统被内核设置为只读。固件升级修复了该错误,服务器从每隔几天出现故障变为坚如磐石。
附注:如果您正在运行 MegaRAID 卡,请安装 MegaCli 包并使用它来检查事件日志。
我发现这个文件很有用。