1 oplog詳解
1.1 oplog介紹
Oplog是local庫下的一個固定集合,Secondary就是通過查看Primary 的oplog這個集合來進(jìn)行復(fù)制的。每個節(jié)點(diǎn)都有oplog,記錄這從主節(jié)點(diǎn)復(fù)制過來的信息,這樣每個成員都可以作為同步源給其他節(jié)點(diǎn)。
Oplog 的存在極大地方便了 MongoDB 副本集的各節(jié)點(diǎn)的數(shù)據(jù)同步,MongoDB 的主節(jié)點(diǎn)接收請求操作,然后在 Oplog 中記錄操作,次節(jié)點(diǎn)異步地復(fù)制并應(yīng)用這些操作。
Oplog 可以說是Mongodb Replication的紐帶。用于存儲 MongoDB 數(shù)據(jù)庫所有數(shù)據(jù)的操作記錄的(實(shí)際只記錄增刪改和一些系統(tǒng)命令操作,查是不會記錄的),有點(diǎn)類似于 mysql 的 binlog 日志。
1.2 Oplog 的默認(rèn)儲存大小
對于 unix 系統(tǒng)和 windows 系統(tǒng)
| Storage Engine | Default Oplog Size | Lower Bound | Upper Bound |
|---|---|---|---|
| In-Memory Storage Engine | 5% of physical memory | 50 MB | 50 GB |
| WiredTiger Storage Engine | 5% of free disk space | 990 MB | 50 GB |
| MMAPv1 Storage Engine | 5% of free disk space | 990 MB | 50 GB |
Oplog 存儲在 local 庫的 oplog.rs 集合里面。對于一般的線上環(huán)境來說,默認(rèn)的 Oplog 值就已經(jīng)足夠了。當(dāng)達(dá)到儲存大小的日志時(shí),新的記錄會將老的記錄覆蓋。
但是我們系統(tǒng)中如果存在以下操作的話,那么我們就可能需要設(shè)置更大的 Oplog 值來避免數(shù)據(jù)的丟失(在副本集中數(shù)據(jù)同步過程):
- 一次更新多個文件
- 刪除與插入同樣數(shù)量的數(shù)據(jù)
- 大量地更新現(xiàn)有的數(shù)據(jù)
從MongoDB 4.0開始, Oplog 可以超過其配置的大小限制,以避免刪除,
一旦mongod第一次創(chuàng)建了 Oplog ,通過更改--oplogSize選項(xiàng)將不會影響 Oplog 的大小。replSetResizeOplog使您可以動態(tài)調(diào)整 Oplog 的大小,而無需重新啟動該mongod過程。
oplog 中每個操作都是 冪等性 的,也就是說,無論是對目標(biāo)數(shù)據(jù)庫應(yīng)用一次還是多次,oplog操作都會產(chǎn)生相同的結(jié)果。這樣就保證了數(shù)據(jù)的一致性。
1.3 副本集數(shù)據(jù)同步的過程
副本集中數(shù)據(jù)同步的詳細(xì)過程:
Primary節(jié)點(diǎn)寫入數(shù)據(jù),Secondary通過讀取Primary的oplog得到復(fù)制信息,開始復(fù)制數(shù)據(jù)并且將復(fù)制信息寫入到自己的oplog。如果某個操作失敗(只有當(dāng)同步源的數(shù)據(jù)損壞或者數(shù)據(jù)與主節(jié)點(diǎn)不一致時(shí)才可能發(fā)生),則備份節(jié)點(diǎn)停止從當(dāng)前數(shù)據(jù)源復(fù)制數(shù)據(jù)。如果某個備份節(jié)點(diǎn)由于某些原因掛掉了,當(dāng)重新啟動后,就會自動從oplog的最后一個操作開始同步,同步完成后,將信息寫入自己的oplog,由于復(fù)制操作是先復(fù)制數(shù)據(jù),復(fù)制完成后再寫入oplog,有可能相同的操作會同步兩份,不過MongoDB在設(shè)計(jì)之初就考慮到這個問題,將oplog的同一個操作執(zhí)行多次,與執(zhí)行一次的效果是一樣的。
作用:
1、當(dāng)Primary進(jìn)行寫操作的時(shí)候,會將這些寫操作記錄寫入Primary的Oplog 中,而后Secondary會將Oplog 復(fù)制到本機(jī)并應(yīng)用這些操作,從而實(shí)現(xiàn)Replication的功能。
2、同時(shí)由于其記錄了Primary上的寫操作,故還能將其用作數(shù)據(jù)恢復(fù)??梢院唵蔚膶⑵湟曌鱉ysql中的binlog。
1.4 oplog的常用命令
注意事項(xiàng):
1、在replica set中oplog是一個定容集合(capped collection),它的默認(rèn)大小是磁盤空間的5%(可以通過--oplogSizeMB參數(shù)修改)。
2、oplog位于local庫的db.oplog.rs。其中記錄的是整個mongod數(shù)據(jù)實(shí)例一段時(shí)間內(nèi)數(shù)據(jù)庫的所有變更(插入/更新/刪除)操作。
3、當(dāng)oplog的空間用完時(shí)新記錄自動覆蓋最老的記錄。其覆蓋范圍被稱作oplog時(shí)間窗口。需要注意的是,因?yàn)閛plog是一個定容集合,
所以時(shí)間窗口能覆蓋的范圍會因?yàn)槟銌挝粫r(shí)間內(nèi)的更新次數(shù)不同而變化。
常用命令:
登錄副本集主節(jié)點(diǎn)
[mongod@mysql-master mult-mongodb]$ mongo 172.21.209.123:38019/admin
1、查看 Oplog 的狀態(tài):可以查看到評估的oplog的所用時(shí)間。
my_ReplSet1:PRIMARY> rs.printReplicationInfo()
configured oplog size: 2048MB
log length start to end: 92054secs (25.57hrs)
oplog first event time: Sat Sep 25 2021 08:45:10 GMT-0400 (EDT)
oplog last event time: Sun Sep 26 2021 10:19:24 GMT-0400 (EDT)
now: Sun Sep 26 2021 10:19:28 GMT-0400 (EDT)
my_ReplSet1:PRIMARY>
2、查看當(dāng)前的 Oplog 存儲設(shè)置的大小
my_ReplSet1:PRIMARY> use local
switched to db local
my_ReplSet1:PRIMARY> db.oplog.rs.stats().maxSize
NumberLong("2147483648")
3、查看 Oplog 最大大小和現(xiàn)在占用的大小,以及記錄時(shí)長和時(shí)間
my_ReplSet1:PRIMARY> db.getReplicationInfo()
{
"logSizeMB" : 2048,
"usedMB" : 22.49,
"timeDiff" : 92184,
"timeDiffHours" : 25.61,
"tFirst" : "Sat Sep 25 2021 08:45:10 GMT-0400 (EDT)",
"tLast" : "Sun Sep 26 2021 10:21:34 GMT-0400 (EDT)",
"now" : "Sun Sep 26 2021 10:21:39 GMT-0400 (EDT)"
}
4、更改副本集成員的 Oplog 大小,更改的值要大于等于990MB,這里設(shè)置為1500MB。
my_ReplSet1:PRIMARY> db.adminCommand({replSetResizeOplog: 1, size: 15000})
{
"ok" : 1,
"$gleStats" : {
"lastOpTime" : Timestamp(0, 0),
"electionId" : ObjectId("7fffffff0000000000000001")
},
"lastCommittedOpTime" : Timestamp(1632666134, 1),
"$configServerState" : {
"opTime" : {
"ts" : Timestamp(1632666137, 1),
"t" : NumberLong(1)
}
},
"$clusterTime" : {
"clusterTime" : Timestamp(1632666137, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1632666134, 1)
}
my_ReplSet1:PRIMARY>
注意:
# 如果我們通過上面命令更改了 Oplog 的大小,系統(tǒng)是不會自動回收原始分配給 Oplog 的磁盤空間,我們需要使用 compact 來回收,在操作 compact 命令時(shí),副本集成員是無法進(jìn)行同步數(shù)據(jù)的。建議在進(jìn)行回收的時(shí)候,不要對數(shù)據(jù)庫進(jìn)行寫入,我們可以通過 rs.stepDown() 來關(guān)閉所有打開的連接。
use local
db.runCommand({ "compact" : "oplog.rs" })
# 執(zhí)行報(bào)錯的話 :"will not run compact on an active replica set primary as this is a slow blocking operation. use force:true to force"
db.runCommand({ "compact" : "oplog.rs" ,"force":true})
1.5 oplog的日志數(shù)據(jù)結(jié)構(gòu)即日志解析
oplog數(shù)據(jù)結(jié)構(gòu),oplog中字段的含義,通過下面的命令取出一條oplog:
my_ReplSet1:PRIMARY> db.oplog.rs.find().skip(1).limit(1).toArray()
[
{
"ts" : Timestamp(1632573921, 2),
"t" : NumberLong(1),
"h" : NumberLong(0),
"v" : 2,
"op" : "c",
"ns" : "config.$cmd",
"ui" : UUID("c781f024-4527-46fd-a448-8cbd8e46737b"),
"wall" : ISODate("2021-09-25T12:45:21.774Z"),
"o" : {
"create" : "transactions",
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "config.transactions"
}
}
}
]
字段含義解析:
ts: 8字節(jié)的時(shí)間戳,由4字節(jié)unix timestamp + 4字節(jié)自增計(jì)數(shù)表示。這個值很重要,在選舉(如master宕機(jī)時(shí))新primary時(shí),會選擇ts最大的那個secondary作為新primary
op:1字節(jié)的操作類型
"i": insert
"u": update
"d": delete
"c": db cmd
"db":聲明當(dāng)前數(shù)據(jù)庫 (其中ns 被設(shè)置成為=>數(shù)據(jù)庫名稱+ '.')
"n": no op,即空操作,其會定期執(zhí)行以確保時(shí)效性
ns:操作所在的namespace
o:操作所對應(yīng)的document,即當(dāng)前操作的內(nèi)容(比如更新操作時(shí)要更新的的字段和值)
o2: 在執(zhí)行更新操作時(shí)的where條件,僅限于update時(shí)才有該屬性。
2、oplog企業(yè)級應(yīng)用
oplog企業(yè)集應(yīng)用主要用于數(shù)據(jù)的備份和恢復(fù)。通過全量備份+增量備份+OPlog數(shù)據(jù)完成數(shù)據(jù)庫的有效恢復(fù),不會丟失數(shù)據(jù)。因此備份數(shù)據(jù)時(shí),也必須對oplog進(jìn)行備份,實(shí)現(xiàn)熱備。備份時(shí)使用--oplog選項(xiàng)即可。
應(yīng)用方法:
1、準(zhǔn)備測試數(shù)據(jù)
my_ReplSet1:PRIMARY>
my_ReplSet1:PRIMARY> show dbs
admin 0.000GB
config 0.001GB
local 0.003GB
ronnystack 0.002GB
my_ReplSet1:PRIMARY> use student
switched to db student
my_ReplSet1:PRIMARY> for(var i = 1 ;i < 100; i++) { db.grades.insert({id:i,coures:"Python",grade:100});}
WriteResult({ "nInserted" : 1 })
my_ReplSet1:PRIMARY> show tables
grades
my_ReplSet1:PRIMARY>
2、查看記錄的日志
my_ReplSet1:PRIMARY> use local
switched to db local
my_ReplSet1:PRIMARY> db.oplog.rs.find().skip(1).limit(1).toArray()
[
{
"ts" : Timestamp(1632573921, 2),
"t" : NumberLong(1),
"h" : NumberLong(0),
"v" : 2,
"op" : "c",
"ns" : "config.$cmd",
"ui" : UUID("c781f024-4527-46fd-a448-8cbd8e46737b"),
"wall" : ISODate("2021-09-25T12:45:21.774Z"),
"o" : {
"create" : "transactions",
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "config.transactions"
}
}
}
]
my_ReplSet1:PRIMARY>
3、oplog 配合mongodump實(shí)現(xiàn)熱備
[mongod@mysql-master bak-mongodb]$ mongodump --port 38019 --oplog -o /data/mongodb/bak-mongodb
4、查看已備份的文件和數(shù)據(jù)庫
[mongod@mysql-master bak-mongodb]$ ll
total 8
drwxrwxr-x 2 mongod mongod 69 Sep 26 10:47 admin
drwxrwxr-x 2 mongod mongod 4096 Sep 26 10:47 config
-rw-rw-r-- 1 mongod mongod 110 Sep 26 10:47 oplog.bson #備份的oplog二進(jìn)制文件
drwxrwxr-x 2 mongod mongod 55 Sep 26 10:47 ronnystack
drwxrwxr-x 2 mongod mongod 53 Sep 26 10:47 student
作用介紹:--oplog 會記錄備份過程中的數(shù)據(jù)變化。會以oplog.bson保存下來
5、故障恢復(fù)。
[mongod@mysql-master bak-mongodb]$ mongorestore --port 38019 --oplogReplay /data/mongodb/bak-mongodb
注:--oplogReplay用戶恢復(fù)oplog日志,通過全備+增倍+Oplog日志實(shí)現(xiàn)企業(yè)級數(shù)恢復(fù)。
3、oplog高級應(yīng)用
oplog高級應(yīng)用是通過全備+增倍+Oplog日志實(shí)現(xiàn)企業(yè)級數(shù)恢復(fù)。
生產(chǎn)企業(yè)案例:
場景:某企業(yè)數(shù)據(jù)庫每天0點(diǎn)對數(shù)據(jù)庫做全量,oplog恢復(fù)窗口為48小時(shí)
某天上午10點(diǎn)student.users表的數(shù)據(jù)被開發(fā)人員誤刪除。
恢復(fù)思路:
1、停應(yīng)用,掛維護(hù)頁面
2、找測試庫,并搭建測試環(huán)境
3、恢復(fù)昨天晚上0點(diǎn)的全備數(shù)據(jù)
4、截取全備之后到student.users誤刪除時(shí)間點(diǎn)的oplog,并恢復(fù)到測試庫
5、將誤刪除表導(dǎo)出,恢復(fù)到生產(chǎn)庫
故障恢復(fù)步驟
1、登錄到數(shù)據(jù)庫并創(chuàng)建備份目錄
[mongod@mysql-master mongodb]$ mongo --port 38019 admin
[mongod@mysql-master bak-mongodb]$ [mongod@mysql-master bak-mongodb]$ mkdir -vp /data/mongodb/bak-mongodb
2、準(zhǔn)備數(shù)據(jù)student庫和grades文檔。
[mongod@mysql-master bak-mongodb]$ for(var i = 1 ;i < 100; i++) { db.grades.insert({id:i,coures:"Python",grade:100});}
3、模擬全庫做備份
[mongod@mysql-master bak-mongodb]$ rm -rf /data/mongodb/bak-mongodb/
[mongod@mysql-master bak-mongodb]$ mongodump --port 38019 --oplog -o /data/mongodb/bak-mongodb #備份全庫
備份的文件目錄
[mongod@mysql-master bak-mongodb]$ ll
total 8
drwxrwxr-x 2 mongod mongod 69 Sep 26 19:52 admin
drwxrwxr-x 2 mongod mongod 4096 Sep 26 19:52 config
-rw-rw-r-- 1 mongod mongod 110 Sep 26 19:52 oplog.bson
drwxrwxr-x 2 mongod mongod 55 Sep 26 19:52 ronnystack
drwxrwxr-x 2 mongod mongod 53 Sep 26 19:52 student
注:--oplog功能:在備份同時(shí),將備份過程中產(chǎn)生的日志進(jìn)行備份
文件必須存放在/data/mongodb/bak-mongodb下,自動命名為oplog.bson
4、模擬數(shù)據(jù)的增長
my_ReplSet1:PRIMARY> for(i=1;i<=1000;i++){ db.users.insert({"id":i,"name":"Ronny","addr":"sichuan","date":new Date()}); }
WriteResult({ "nInserted" : 1 })
my_ReplSet1:PRIMARY> for(i=1;i<=100;i++){ db.courses.insert({"id":i,"name":"Python","keshi":240,"date":new Date()}); }
WriteResult({ "nInserted" : 1 })
5、模擬誤刪除數(shù)據(jù)庫
場景:上午10點(diǎn),某開發(fā)人員誤刪除student庫下的user表
元數(shù)據(jù):
my_ReplSet1:PRIMARY> show dbs
admin 0.000GB
config 0.000GB
local 0.003GB
ronnystack 0.002GB
student 0.000GB
my_ReplSet1:PRIMARY> use student
switched to db student
my_ReplSet1:PRIMARY> show tables
courses
grades
users
my_ReplSet1:PRIMARY>
誤刪除模擬:
my_ReplSet1:PRIMARY> db.users.drop()
true
my_ReplSet1:PRIMARY>
my_ReplSet1:PRIMARY> show tables
courses
grades
my_ReplSet1:PRIMARY>
6、模擬。發(fā)現(xiàn)故障立即啟動故障恢復(fù)方案。立即停庫,停業(yè)務(wù)。
備份現(xiàn)有的數(shù)據(jù)和local庫下的oplog.rs文檔
[mongod@mysql-master student]$ mongodump --port 38019 -d local -c oplog.rs -o /data/mongodb/bak-mongodb
2021-09-26T20:04:34.740-0400 writing local.oplog.rs to /data/mongodb/bak-mongodb/local/oplog.rs.bson
2021-09-26T20:04:34.958-0400 done dumping local.oplog.rs (127999 documents)
7、截圖oplog的數(shù)據(jù),并恢復(fù)到刪除之前的位置。
7.1 登陸到原數(shù)據(jù)庫
[mongod@mysql-master bak-mongodb]$ mongo --port 38019 admin
7.2 查看獲取數(shù)據(jù)庫的oplog,此處獲取一個文檔。
my_ReplSet1:PRIMARY> use local
switched to db local
my_ReplSet1:PRIMARY> db.oplog.rs.find({op:"c"}).pretty();
{
"ts" : Timestamp(1632700901, 1),
"t" : NumberLong(1),
"h" : NumberLong(0),
"v" : 2,
"op" : "c",
"ns" : "student.$cmd",
"ui" : UUID("5ae40786-5938-43a8-9b8e-a4bd80f67298"),
"o2" : {
"numRecords" : 1000
},
"wall" : ISODate("2021-09-27T00:01:41.904Z"),
"o" : {
"drop" : "users"
}
}
my_ReplSet1:PRIMARY>
7.3 獲取到oplog誤刪除時(shí)間點(diǎn)位置:
"ts" : Timestamp(1632700901, 1)
8、數(shù)據(jù)庫恢復(fù)
方案:恢復(fù)全備備份+應(yīng)用oplog
8.1、進(jìn)入到備份目錄下
[mongod@mysql-master bak-mongodb]$ ll
total 8
drwxrwxr-x 2 mongod mongod 69 Sep 26 19:52 admin
drwxrwxr-x 2 mongod mongod 4096 Sep 26 19:52 config
drwxrwxr-x 2 mongod mongod 57 Sep 26 20:04 local
-rw-rw-r-- 1 mongod mongod 110 Sep 26 19:52 oplog.bson
drwxrwxr-x 2 mongod mongod 55 Sep 26 19:52 ronnystack
drwxrwxr-x 2 mongod mongod 53 Sep 26 19:52 student
[mongod@mysql-master bak-mongodb]$ cd local/
[mongod@mysql-master local]$ ll
total 23644
-rw-rw-r-- 1 mongod mongod 24203894 Sep 26 20:04 oplog.rs.bson
-rw-rw-r-- 1 mongod mongod 142 Sep 26 20:04 oplog.rs.metadata.json
8.2 復(fù)制local庫下的oplog.rs.bson到上一級目錄下,會覆蓋之前備份的oplog.bson。如需要,請備份。
[mongod@mysql-master local]$ cp oplog.rs.bson ../oplog.bson
8.3、刪除備份的local庫和表
[mongod@mysql-master local]$ rm -rf /data/mongodb/bak-mongodb/local/
8.4、恢復(fù)數(shù)據(jù)庫,及恢復(fù)過程
#數(shù)據(jù)庫的恢復(fù),如果是生產(chǎn)環(huán)境,做好備份,請恢復(fù)到測試庫中。本次是在原庫恢復(fù),因有冪等性,恢復(fù)比較慢。
[mongod@mysql-master bak-mongodb]$ mongorestore --port 38019 --oplogReplay --oplogLimit "1632700901:1" --drop /data/mongodb/bak-mongodb
2021-09-26T20:17:44.451-0400 preparing collections to restore from
2021-09-26T20:17:44.451-0400 don't know what to do with file "/data/mongodb/bak-mongodb/.oplog.bson.swp", skipping...
2021-09-26T20:17:44.461-0400 reading metadata for config.cache.chunks.config.system.sessions from /data/mongodb/bak-mongodb/config/cache.chunks.config.system.sessions.metadata.json
2021-09-26T20:17:44.513-0400 restoring config.cache.chunks.config.system.sessions from /data/mongodb/bak-mongodb/config/cache.chunks.config.system.sessions.bson
2021-09-26T20:17:44.526-0400 reading metadata for student.grades from /data/mongodb/bak-mongodb/student/grades.metadata.json
2021-09-26T20:17:44.526-0400 reading metadata for ronnystack.courses from /data/mongodb/bak-mongodb/ronnystack/courses.metadata.json
2021-09-26T20:17:44.551-0400 restoring student.grades from /data/mongodb/bak-mongodb/student/grades.bson
2021-09-26T20:17:44.561-0400 restoring ronnystack.courses from /data/mongodb/bak-mongodb/ronnystack/courses.bson
2021-09-26T20:17:44.562-0400 restoring indexes for collection ronnystack.courses from metadata
2021-09-26T20:17:44.841-0400 finished restoring ronnystack.courses (0 documents, 0 failures)
2021-09-26T20:17:44.861-0400 no indexes to restore
2021-09-26T20:17:44.861-0400 finished restoring student.grades (99 documents, 0 failures)
2021-09-26T20:17:44.862-0400 reading metadata for config.cache.chunks.ronnystack.courses from /data/mongodb/bak-mongodb/config/cache.chunks.ronnystack.courses.metadata.json
2021-09-26T20:17:44.907-0400 restoring config.cache.chunks.ronnystack.courses from /data/mongodb/bak-mongodb/config/cache.chunks.ronnystack.courses.bson
2021-09-26T20:17:44.913-0400 reading metadata for config.cache.collections from /data/mongodb/bak-mongodb/config/cache.collections.metadata.json
2021-09-26T20:17:44.917-0400 reading metadata for config.cache.databases from /data/mongodb/bak-mongodb/config/cache.databases.metadata.json
2021-09-26T20:17:44.950-0400 restoring config.cache.collections from /data/mongodb/bak-mongodb/config/cache.collections.bson
2021-09-26T20:17:44.965-0400 restoring indexes for collection config.cache.chunks.config.system.sessions from metadata
2021-09-26T20:17:44.967-0400 restoring indexes for collection config.cache.chunks.ronnystack.courses from metadata
2021-09-26T20:17:44.973-0400 restoring config.cache.databases from /data/mongodb/bak-mongodb/config/cache.databases.bson
2021-09-26T20:17:45.024-0400 no indexes to restore
2021-09-26T20:17:45.024-0400 finished restoring config.cache.collections (2 documents, 0 failures)
2021-09-26T20:17:45.026-0400 no indexes to restore
2021-09-26T20:17:45.026-0400 finished restoring config.cache.databases (2 documents, 0 failures)
2021-09-26T20:17:45.038-0400 finished restoring config.cache.chunks.ronnystack.courses (4 documents, 0 failures)
2021-09-26T20:17:45.040-0400 finished restoring config.cache.chunks.config.system.sessions (1024 documents, 0 failures)
2021-09-26T20:17:45.040-0400 replaying oplog
2021-09-26T20:17:47.451-0400 oplog 970KB
2021-09-26T20:17:50.451-0400 oplog 2.44MB
2021-09-26T20:17:53.451-0400 oplog 3.59MB
2021-09-26T20:17:56.451-0400 oplog 4.75MB
2021-09-26T20:17:59.451-0400 oplog 5.87MB
2021-09-26T20:18:02.451-0400 oplog 6.98MB
2021-09-26T20:18:05.451-0400 oplog 8.08MB
2021-09-26T20:18:08.451-0400 oplog 9.18MB
2021-09-26T20:18:11.451-0400 oplog 10.3MB
2021-09-26T20:18:14.451-0400 oplog 11.4MB
2021-09-26T20:18:17.451-0400 oplog 12.6MB
2021-09-26T20:18:20.451-0400 oplog 13.6MB
2021-09-26T20:18:23.451-0400 oplog 14.5MB
2021-09-26T20:18:26.451-0400 oplog 15.4MB
2021-09-26T20:18:29.451-0400 oplog 16.1MB
2021-09-26T20:18:32.451-0400 oplog 17.0MB
2021-09-26T20:18:35.451-0400 oplog 17.9MB
2021-09-26T20:18:38.451-0400 oplog 18.8MB
2021-09-26T20:18:41.451-0400 oplog 19.7MB
2021-09-26T20:18:44.451-0400 oplog 20.5MB
2021-09-26T20:18:47.451-0400 oplog 21.3MB
2021-09-26T20:18:50.451-0400 oplog 23.1MB
2021-09-26T20:18:50.523-0400 applied 114582 oplog entries
2021-09-26T20:18:50.523-0400 oplog 23.1MB
2021-09-26T20:18:50.523-0400 1131 document(s) restored successfully. 0 document(s) failed to restore.
[mongod@mysql-master bak-mongodb]$
注意:--oplogLimit "1632700901:1" 的格式和位置。
8.5、登錄到數(shù)據(jù)庫并驗(yàn)證數(shù)據(jù)
my_ReplSet1:PRIMARY> use student
switched to db student
my_ReplSet1:PRIMARY> show tables
courses
grades
users
my_ReplSet1:PRIMARY> db.users.count()
1000
my_ReplSet1:PRIMARY>
4 分片集群備份
思考:分片集群是分布式,如何進(jìn)行備份有效恢復(fù),制定備份方案。
4.1、分片集群要備份什么?
根據(jù)分片集群的結(jié)構(gòu)組成,分為三部分:mongos、config server和shard 。
mongos是作為路由,不存儲數(shù)據(jù)。因此,需要備份config server和shard 節(jié)點(diǎn),
4.2 、單獨(dú)進(jìn)行備份
備份有什么困難和問題
(1)chunk遷移的問題
人為控制在備份的時(shí)候,避開遷移的時(shí)間窗口
(2)shard節(jié)點(diǎn)之間的數(shù)據(jù)不在同一時(shí)間點(diǎn)。
選業(yè)務(wù)量較少的時(shí)候
4.3 、了解Ops Manager ,用于分片備份,監(jiān)控,優(yōu)化等。
至此:MongoDB的OPlog和備份恢復(fù)案例演示完畢。