当 MongoDB 没有足够的 oplog 来带走进程时,就会发生陈旧。所以我建议两种方法:
- 从
stopping the application writes 的新数据目录开始辅助,这会减少 oplog 增长,因此有助于更好的初始同步。
- 如果您不想停止应用程序写入,您必须
increase the oplog size 表示当前大小。可以根据复制窗口计算 Oplog 大小。
增加oplog:
关闭主服务器
use admin
db.shutdownServer()
以独立方式启动主服务器并在不同的端口上运行,例如 37017
在 37017 端口登录 mongo
mongo --port 37017
删除本地数据库中的旧内容
为了安全起见,在删除之前备份旧的 oplog
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
希望对你有帮助!!!