3月31日搬瓦工机房部分节点遭受电源故障,服务器直接等于异常关机了。我很不巧也是本次事故的受害者... 几个小时后机房恢复,但是 MySQL、Redis、MongoDB 均出现故障,无法启动... 本文记录以上这些服务的修复过程。
MySQL 无法启动
启动 MySQL 后,虽然启动失败,但是可以在 log 里找到如下内容:
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
修复步骤:
- 在配置文件
[mysqld]下增加一行innodb_force_recovery=6,此时服务可以启动,可以执行数据查询但不能执行插入和更新。 - 此时 log 中有一些这样的日志,表示数据库损坏:
[ERROR] InnoDB: Failed to find tablespace for table '"database"."table"' in the cache.
Attempting to load the tablespace with space id 1290.
- 利用数据库管理工具如
Navicat或phpMyAdmin将数据库当前数据导出。 - 关闭 MySQL 服务,备份数据目录:
service mysqld stop
mv /mysql/data /mysql/data_backup_20220331
mkdir /mysql/data
- 重新初始化 MySQL:
/mysql/bin/mysqld --initialize
- 使用数据库管理工具重新登录,把数据重新导入,修复完成。
Redis 无法启动
Redis 无法正常启动,log 中出现如下日志:
Fatal error loading the DB: Invalid argument. Exiting.
修复步骤:
- 删除
dump.rdb文件:
rm /redis/dump.rdb
- 重启 Redis 即可。
MongoDB 无法启动
修复步骤:
- 删除数据目录中的
.lock文件,备份storage.bson:
rm /mongodb/data/mongod.lock
rm /mongodb/data/WiredTiger.lock
mv /mongodb/data/storage.bson /mongodb/data/storage.bson.bak
- 修复数据库:
/mongodb/bin/mongod --dbpath=/mongodb/data --repair
- 还原
storage.bson:
mv /mongodb/data/storage.bson.bak /mongodb/data/storage.bson
- 重新启动服务。
