luxin33231 2014-12-04 07:54 采纳率: 0%
浏览 1388

mongodb复制集数据恢复问题

我的primary库和仲裁节点在A服务器上,second库在B服务器上,现在的问题是A服务器挂了3天,然后恢复后重启主库和仲裁节点,但是在备库产生的3天数据却没同步回主库,请问各位大神是否有招,或者是有没有手动同步的方法

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 03:40
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可以通过使用MongoDB的replSet特性来解决。replSet是一个用于管理一个复制集(replica set)的技术,它允许你将数据分布在多个机器上,并且可以在故障发生时自动从备用副本中读取数据。

    以下是一些步骤,可以帮助您解决问题:

    1. 启动备库:首先,你需要确保备库已经启动并且可以访问。

    2. 检查状态:检查备库的状态是否为“ready”或“master”。

    3. 设置主库为主:如果你的备库是“secondary”,你可以将其设置为主库。这可以通过修改mongod.conf文件中的config部分来实现。

    # 在备库上
    cd /path/to/your/replset
    /etc/init.d/mongod restart
    
    1. 等待复制过程完成:这可能需要几分钟到几小时不等的时间。在这段时间内,你可以通过查看mongos.log日志文件来跟踪复制过程。

    2. 手动同步数据:一旦复制过程完成,你可以使用mongoimport命令手动同步数据。例如:

    # 同步 primary 数据库的所有集合
    mongoimport --host A --db primary --collection coll_name --username user --password password --file /path/to/local/file.json
    
    1. 验证数据一致性:最后,你可以通过比较mongos.log文件的内容与本地数据库内容来验证数据的一致性。

    请注意,以上步骤可能需要根据你的具体环境进行调整。此外,如果备库的数据已经被其他操作覆盖,或者你没有正确的权限来执行这些操作,那么可能需要寻找更复杂的方法来解决这个问题。

    对于复杂的场景,可能还需要考虑使用一些工具和框架,比如mariadb-syncrsync 或者 mongosh--verify 命令。这些方法通常会提供更多的控制和灵活性,但它们也可能带来额外的开销和复杂度。

    希望这个答案能帮助到你!如果你有具体的代码示例,欢迎提供更多详细信息。

    评论

报告相同问题?