记录一下那天晚上的排查过程。数据库启动失败,错误日志提示无法打开权限相关文件,之前磁盘曾经满过一次,之后就再没起来。
排查方向其实有限,先把可能性排一排。磁盘满时权限表写入不完整。也可能是数据目录属主被改动,服务账号读不到。
不容易想到的是,文件系统只读导致启动时校验失败。
上来先看启动日志的具体报错
tail -50 /var/log/mysql/error.log
然后核对数据目录属主权限
ls -ld /var/lib/mysql && ls -l /var/lib/mysql/mysql
随后确认磁盘和文件系统状态
df -h /var/lib/mysql && mount | grep ' / '
剩下的就是用跳过授权表的方式启动导出
mysqld_safe --skip-grant-tables &
这次没动代码,只在配置和运行环境上找原因。
怎么算真的好了,看的是同一批现象。服务能正常启动,登录后权限校验通过,业务连接恢复。
跳过授权表启动时任何本地用户都能登录,处理完要立刻关闭并恢复权限表,别把这个状态留在线上。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。