mongodb容器启动报错数据损坏修复
服务器关机重启,发现docker-compose启动mongodb一直restart,且docker logs 一直跳过执行脚本,mongod.log发现是wt文件损坏
#先将日志复制出来
docker cp mongodb:/var/log/mongodb/mongod.log /root
tail -200 /root/mongod.log
2023-09-04T14:25:20.599+0800 I CONTROL [main] ***** SERVER RESTARTED *****
2023-09-04T14:25:20.602+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols ‘none’
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=14a28e3e5853
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] db version v4.0.6
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] git version: caa42a1f75a56c7643d0b68d3880444375ec42e3
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] allocator: tcmalloc
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] modules: none
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] build environment:
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] distmod: rhel70
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] distarch: x86_64
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] target_arch: x86_64
2023-09-04T14:25:20.617+0800 I CONTROL [initandlisten] options: { config: “/etc/mongod.conf”, net: { bindIp: “0.0.0.0”, port: 27017 }, processManagement: { fork: false, pidFilePath: “/var/run/mongodb/mongod.pid”, timeZoneInfo: “/usr/share/zoneinfo” }, security: { authorization: “enabled” }, storage: { dbPath: “/data/db”, journal: { enabled: true } }, systemLog: { destination: “file”, logAppend: true, path: “/var/log/mongodb/mongod.log” } }
2023-09-04T14:25:20.617+0800 F STORAGE [initandlisten] An incomplete repair has been detected! This is likely because a repair operation unexpectedly failed before completing. MongoDB will not start up again without --repair.
2023-09-04T14:25:20.617+0800 F - [initandlisten] Fatal Assertion 50922 at src/mongo/db/storage/storage_engine_init.cpp 86
2023-09-04T14:25:20.617+0800 F - [initandlisten]
***aborting after fassert() failure
上述报错为mongodb数据损坏。但是docker容器无法启动成功直接修复,进行如下操作:
#停止mongodb容器
docker stop mongodb
记得先备份mongodb数据文件
#创建临时容器,将目录挂载至临时容器
docker run -it --rm --volumes-from mongodb --name mongodb-repair mongodb:latest bash
#在临时容器操作repair
mongod --dbpath /data/db --repair
#数据修复成功后重启mongodb容器
docker restart mongodb
容器状态恢复