我在mongodb复制中有错误:数据太陈旧,停止复制。我试图从我的数据库中删除所有集合,但它没有用。如何删除oplog以使我的复制工作?我只需要复制。
谢谢
答案 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
希望这有助于!!!