数据太陈旧,停止复制

时间:2014-07-07 21:08:52

标签: mongodb replication

我在mongodb复制中有错误:数据太陈旧,停止复制。我试图从我的数据库中删除所有集合,但它没有用。如何删除oplog以使我的复制工作?我只需要复制。

谢谢

3 个答案:

答案 0 :(得分:1)

NOT 想要删除你的oplog。您只需在辅助数据库中停止mongod进程,删除辅助数据目录中的数据数据库文件,然后在辅助数据库中启动mongod。然后,您可以在所有受影响的辅助设备上执行此操作。

正如Zamnuts用户指出的那样,你应该阅读标题为" Resync a Member of a Replica Set"

的MongoDB文件

答案 1 :(得分:1)

阅读手册:http://docs.mongodb.org/manual/tutorial/resync-replica-set-member删除馆藏是不够的,您需要完成清除所有数据,然后perform an initial sync

有两个高级选项(引自手册):

  

使用空数据目录重新启动mongod并让MongoDB使用   正常的初始同步功能可恢复数据。这是更多   简单的选项,但可能需要更长的时间来替换数据。

  

使用最新数据目录的副本重新启动计算机   副本集中的另一个成员。此过程可以替换数据   更快,但需要更多的手动步骤。

答案 2 :(得分:0)

当MongoDB没有足够的oplog来带走这个过程时,会发生陈旧。所以我建议使用两种方法:

  • 使用stopping the application writes的新数据dir启动辅助,这会减少oplog增长,因此有助于更好的初始同步。
  • 如果您不想停止应用程序写入,则必须increase the oplog size表示当前大小。 Oplog大小可以在复制窗口的基础上计算。

增加oplog:

关闭主服务器

use admin

db.shutdownServer()

以独立方式启动主要版本&运行在不同的端口说37017

在37017端口登录mongo

mongo --port 37017

删除本地数据库中的旧内容

为安全起见,在删除之前有旧的oplog的backop

mongodump --db local --collection 'oplog.rs' --port 37017

删除本地数据库中的旧内容

use local

db.oplog.rs.drop()

db.me.drop()

db.replset.election.drop()

db.replset.minvalid.drop()

db.startup_log.drop()

无法删除Replset集合,因此请使用必需的ID删除它:

db.system.replset.remove({ "_id" : "your_replsetname"})

创建一个所需大小的新oplog,例如50 GB

db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )

此外,您可以在mongod.conf文件中指定以MB为单位的oplog大小,例如50 GB的429496 MB

replication:
   oplogSizeMB: 429496

希望这有助于!!!