MongoDB更改oplog的大小


(一)oplog介紹
oplog是MongoDB數據庫的操作日志,記錄了MongoDB數據庫的所有寫操作,類似MySQL數據庫的binlog日志。在MongoDB副本集中,oplog從主節點被復制到次級節點,通過次級節點對日志進行重做,實現次級節點與主節點數據一致。oplog日志保存在local.oplog.rs集合中。


(二)修改oplog的大小

oplog大小修改根據數據庫版本,有2種不同的方法:

  • 在MongoDB 3.4及更早的版本中,直接刪除並重建local.oplog.rs集合來調整操作日志的大小;
  • 在MongoDB 3.6及后續的版本中,使用replSetResizeOplog命令來調整操作日志的大小;

從MongoDB 4.0開始,MongoDB禁止刪除local.oplog.rs集合,所以只能用replSetResizeOplog來修改oplog的大小了。


這里演示在MongoDB 4.2版本上修改oplog的大小,先在次級節點上修改操作日志的大小,最后在主機點上修改。

具體操作步驟如下:
STEP1:連接到副本集成員

mongo --authenticationDatabase admin -u replica -p replica

STEP2:【可選】驗證oplog的大小

rstest:PRIMARY> use local
switched to db local
rstest:PRIMARY> db.oplog.rs.stats().maxSize
NumberLong(1970031616)

STEP3:修改副本集節點oplog的大小,oplog必須大於990MB,這里改為1000MB

rstest:PRIMARY> db.adminCommand({replSetResizeOplog:1,size:1000})
 {
     "ok" : 1,
     "$clusterTime" : {
         "clusterTime" : Timestamp(1593527768, 1),
         "signature" : {
             "hash" : BinData(0,"7fw3+0veB35tVTFl83c57kvM0OI="),
             "keyId" : NumberLong("6841443127941660675")
         }
     },
     "operationTime" : Timestamp(1593527768, 1)
 }

STEP4:【可選】壓縮oplog.rs以回收磁盤空間
減小oplog的大小不會回收已經分配的磁盤空間,必須壓縮oplog.rs來回收磁盤空間。

use local
db.runCommand({"compact" : "oplog.rs"})

注意:當執行壓縮時,副本集成員無法復制oplog條目,可能會導致主節點的操作日志被覆蓋,刺激節點無法同步數據而產生重新完全同步,建議在無業務的時間段內執行壓縮操作。


【完】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM