Linode 上 VPS 重启后 MySQL 服务器挂了的恢复方法

做个备忘,省得每次遇见都得重新 Google 了。

这次 Linode 整体更新 XEN 的安全漏洞补丁之后,我的 VPS 重启之后,自己也没有注意,今天打开一下自己的博客站点,发现 WordPress 报了了一个「连接数据库出错」的问题,首页无法正常打开了。

之前也碰到过类似的问题,但是之前每次都是直接丢给我们可爱的耀华同学来搞定的,现在耀华同学不在身边,有的时候用起来就没有那么顺手了,所以捏,咱们还是得学会自己动手,丰衣足食啊。在询问了耀华同学咱们 MySQL 的错误日志在哪里无果之后,本想尝试直接使用耀华同学提供的通过 find 命令暴力查找了(事实证明这样可能可以找到,但是会比较麻烦),刚好看到网上有个默认地址提供了,直接 cd 到那个目录之后,看到一个长得很像的 error log 文件,打开一看,果了个然啊。打开看看错误日志里头的错误是啥,原来是 mysql 依赖的临时文件创建不成功,文件权限有问题,那么修改一下文件权限吧,修改好了文件权限之后,重启 mysql 服务,一切 OK。

那么我们来回顾一下整个流程是怎么样的。

  1. 发现 WordPress 报告 MySQL 数据库连接出错了,那么 ssh 到 VPS 上,执行一下 ps aux | grep mysql 命令,发现并没有 mysql 服务进程,可以肯定 mysql 服务没有成功启动;
  2. 那么接下来我们就要看看 mysql 服务为啥没有在此次 XEN 补丁升级后自动启动成功呢,找 error 日志来看吧,最终我们发现 rpm 默认安装的 mysql 错误日志路径在 /var/lib/mysql 目录下,跟 mysql 的核心数据库文件就在同一个目录,建议不要这么干,还是在 my.cnf 中好好地配置一下 mysql 的日志文件存放路径吧(由于我并非一个合格的服务器开发人员或维护人员,原谅我使用了默认配置);
  3. 找到这个名称为 li402-16.err(文件名格式为:[host-name].err)的错误日志文件,滚到最下面一行,看看错误是啥吧,/usr/libexec/mysqld: Can’t create/write to file ‘/dev/shm/ibinQuSV’ (Errcode: 13);
  4. 这下可以确认是因为不能往 /dev/shm 这个目录里头写入文件了,如果不是磁盘满了那么肯定就是权限不足,所以无法写入文件,但是这个目录其实是一个内存里头的临时文件目录,所以不会出现满了的情况,那么肯定的权限的问题;
  5. 接下来我们就应该给 mysql 用户分配 /dev/shm 目录的写权限就好了,由于我比较懒(实际上是不太会,这个会有安全隐患的),我直接把 /dev/shm 的权限修改为 777 了,建议还是自行严格地将写入权限分配给 mysql 用户吧;
  6. 然后通过 /etc/init.d/mysqld start 启动 mysql 服务;
  7. 再次打开博客站点首页,测试通过,OK 搞定了。

此事的原因很有可能是因为 VPS 重启之后,对于某些敏感文件目录,XEN 容器管理的原则就是将其恢复到默认的文件权限吧,不是很了解,但是直觉会是这样,也就是说以后碰到重启这样的情况再次出现 MySQL 启动错误,都应该先检查一下是否为临时文件写入权限的问题导致的。


喵的,这次 Linode VPS 硬件问题之后,机器再次重启了,泥煤的啊,突然发现,在这里的备忘压根达不到备忘的效果啊,VPS 挂了,博客打不开啊,你上哪儿看去呢?好像是个问题呢。

  • 我也被 Linode 这坑了 3 次了。。但我装的是 LNMP 的包,原因是因为装 python-mysql 的时候被自动 apt-get 装了 mysql 结果重启会自动生成配置文件,和 LNMP 编译安装的 mysql 的配置文件冲突了。。

    • 昨天我的 Linode 又被重启了,哎,也是醉了