20220331搬瓦工电源故障数据恢复记录

3月31日搬瓦工机房部分节点遭受电源故障, 服务器直接等于异常关机了。我很不巧也是本次事故的受害者…
几个小时候机房恢复,但是 mysql、redis、mongodb 均出现故障,无法启动…
本文记录以上这些服务的修复过程。

mysql无法启动

启动 mysql 后,虽然启动失败,但是可以在 log 里找到如下内容

1
2
3
[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中有一些这样的日志, 表示数据库损坏

    1
    2
    [ERROR] InnoDB: Failed to find tablespace for table '"database"."table"' in the cache.
    Attempting to load the tablespace with space id 1290.
  • 利用数据库管理工具如 Navicatphpmyadmin 将数据库当前数据导出

  • 关闭 mysql 服务, 备份数据目录

    1
    2
    3
    service mysqld stop
    mv /mysql/data /mysql/data_backup_20220331
    mkdir /mysql/data
  • 重新初始化 Mysql

    1
    /mysql/bin/mysqld --initialize
  • 使用数据库管理工具重新登录上去, 把数据重新导入进去, 修复完成。

Redis无法启动

Redis无法正常启动, log中出现如下日志

1
Fatal error loading the DB: Invalid argument. Exiting.

修复步骤:

  • 删除 dump.rdb 文件

    1
    rm /redis/dump.rdb
  • 重启 Redis 即可

MongoDB无法启动

修复步骤:

  • 数据目录删除 .lock 后缀文件, 备份 storage.bson

    1
    2
    3
    rm /mongodb/data/mongod.lock
    rm /mongodb/data/WiredTiger.lock
    mv /mongodb/data/storage.bson /mongodb/data/storage.bson.bak
  • 修复数据库

    1
    /mongodb/bin/mongod --dbpath=/mongodb/data --repair
  • 还原 storage.bson

    1
    mv /mongodb/data/storage.bson.bak /mongodb/data/storage.bson
  • 重新启动服务