五一小长假期间,办公室所在大楼意外停电,测试环境的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