MongoDB Replicaset数据损坏修复


五一小长假期间,办公室所在大楼意外停电,测试环境的MongoDB Replicaset集群重启失败。出现错误

STORAGE  [initandlisten] WiredTiger error (0)

更改权限、删除lock文件后出现错误:

WiredTiger.wt: read checksum error for 12288B block at offset 1540096

至此,确定数据损坏。

由于测试环境使用docker部署,因此修复步骤均在docker环境下完成。修复步骤如下:

1、停止Replicaset集群:
    docker-compose -f bitnami/mongodb/docker-compose-replicaset.yml down
2、修复数据:
    docker run -it -v /data/bitnami/mongo:/data docker.io/bitnami/mongodb:4.2-debian-10 mongod --repair
3、导出修复后的数据:
    docker run -it -v /data/bitnami/mongo:/data -v /data/bitnami/mongobak:/bak docker.io/bitnami/mongodb:4.2-debian-10 mongod
    docker exec -it 容器名 mongodump --host=localhost --port=27017 --out=/bak
4、修改Replicaset集群存储卷位置,mount bak到容器内,并全新运行Replicaset集群
    docker-compose -f bitnami/mongodb/docker-compose-replicaset.yml up -d
5、恢复数据
    docker exec -it mongodb_mongodb-primary_1 mongorestore --host=localhost --port=27017 --username=root --password=密码 /bak