面试题答案
一键面试- 评估损坏情况:
- 使用
db.runCommand({replSetGetStatus: 1})
命令查看副本集状态,确定各个节点的角色及数据情况。 - 尝试在从节点上查询数据,分析疑似损坏数据的特征,例如是否有文档丢失、字段值异常等。
- 使用
- 尝试从备份恢复:
- 找到最近备份:如果有定期备份,定位最新的可用备份。常见的备份方法有
mongodump
命令生成的备份文件。 - 恢复备份:在一个临时环境或新节点上,使用
mongorestore
命令恢复备份数据。例如,假设备份文件在/backup/mongodb
目录下,运行mongorestore --uri="mongodb://localhost:27017" /backup/mongodb
。
- 找到最近备份:如果有定期备份,定位最新的可用备份。常见的备份方法有
- 修复从节点疑似损坏数据:
- 确定修复方法:如果备份数据也存在一定程度的陈旧,对于从节点疑似损坏数据,若只是部分文档损坏,可尝试手动修复。例如,通过查询相邻时间的相关数据,手动补充缺失字段或修正错误值。
- 操作步骤:先在从节点的副本集成员状态设为
PRIMARY
(使用rs.stepDown()
命令使当前主节点退位,然后在要操作的从节点上使用rs.slaveOk()
开启读操作权限,再使用rs.reconfig()
重新配置副本集,将该从节点提升为主节点)。然后对疑似损坏数据进行修复,修复完成后,再将节点状态恢复为从节点(使用rs.stepDown()
使该节点退位,然后重新配置副本集)。
- 重新构建主节点:
- 选择数据来源:如果从节点数据经过修复可用,可将修复后的从节点提升为主节点。
- 操作步骤:在一个未损坏的从节点上,使用
rs.stepDown()
使当前主节点退位(若当前主节点数据丢失无法操作此命令,可直接进行下一步)。然后使用rs.reconfig()
重新配置副本集,将该从节点提升为主节点。其他从节点会自动同步新主节点的数据。
- 关键要点:
- 备份重要性:定期备份是数据恢复的基础,确保备份策略合理,备份数据可正常恢复。
- 操作顺序:先评估数据损坏情况,再决定恢复方式,操作过程中注意副本集的角色切换和配置更新顺序,避免造成数据不一致。
- 数据一致性:在修复和恢复过程中,要保证各个节点之间的数据一致性,操作完成后全面检查数据的准确性。
- 测试环境:在正式环境操作前,尽量在测试环境模拟数据损坏及恢复过程,验证恢复方案的可行性。