结论

  原本打算学mysql但是老头环出了,老头环天下第一!还完全不会mysql,自己摸索了一段时间,总算是修好了。简单来说,腾讯云官方的预装wordpress的linux镜像里,mysql的配置文件里是datadir=/var/lib/mysql,但是实际上存储data的路径是/www/server/data,重启linux的时候重新加载了配置文件,导致datadir变成了上面那个,于是就无法正常启动了。只要改成datadir=/www/server/data/再启动mysql就ok了。但其实之前并不是没有重启过,当时没有遇到这个问题。后来试了一个挺早的快照,重启后mysql也是因为同样的原因寄了,为什么曾经重启时没出问题呢,关于这点目前还没有头绪。

  顺带一提老头环100小时了。

试错之路

  全流程大概是这样的:前几天突然想在code-server上弄个jupyter notebook,弄的时候嫌ssh有点卡就重启了linux,没想到重启后wordpress出问题了,显示建立数据库连接时出错。因为之前做了快照,就直接回滚了,回滚后wordpress仍然显示建立数据库连接时出错。确认了一下,发现是mysql(mariadb)停止运行了。尝试手动开启mysql,但没有成功。想看下log找下问题所在,看到mysql配置文件写着log-error=/var/log/mariadb/mariadb.log,但是实际上没这个目录和文件,那自己动手建一个

# mkdir /var/log/mariadb
# touch /var/log/mariadb/mariadb.log
# chown -R mysql:mysql /var/log/mariadb
# chmod -R 755 /var/log/mariadb

  之后再次尝试启动mysql,这时错误日志已经正常在写入了,查看日志发现了数条错误,例如[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist.搜了一下解决方案,发现要执行mysql_install_db,当时觉得很奇怪为什么用了这么久突然要初始化数据库,但还是照做了

# /www/server/mysql/scripts/mysql_install_db --basedir=/www/server/mysql --datadir=/www/server/data/ --user=mysql

  这时提示找不到/www/server/mysql/lib/plugin/auth_pam_tool_dir/auth_pam_tool,我看了一下,确实没有,那还是自己建一个,然后尝试启动mysql

# touch /www/server/mysql/lib/plugin/auth_pam_tool_dir/auth_pam_tool
# chown -R mysql:mysql /www/server/mysql/lib/plugin/auth_pam_tool_dir/auth_pam_tool
# chmod -R 0755 /www/server/mysql/lib/plugin/auth_pam_tool_dir/auth_pam_tool
# service mysqld start

  此时提示ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock',按照网上教程在配置文件中加入

[client]
port=3306
socket=/var/lib/mysql/mysql.sock

  之后再次尝试启动mysql,总算成功了。打开blog主页,仍然是显示建立数据库连接时出错,看了下错误日志,wordpress尝试访问数据库但是被拒绝了。试了一下USE wordpress;,结果提示没有wordpress这个数据库。我感到很奇怪,明明/www/server/data这个目录下有个文件夹叫wordpress。又仔细看了一下配置文件,发现里面有一条datadir=/var/lib/mysql,这下就全搞明白了,绕了好大一圈没想到答案这么简单。于是直接回滚了之前的快照,把这条改成datadir=/www/server/data/,重启mysql,这下blog就可以正常打开了。


''Stand on the shoulders of giants.''