自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一則 MongoDB 副本集遷移實(shí)操案例

開發(fā) 前端
如果全備時(shí)指定了 gzip,在提取時(shí)間戳?xí)r要重命名 oplog.bson 為 oplog.bson.gz,然后解壓,再利用 bsondump 工具解析 bson 文件,否則會(huì)報(bào)錯(cuò)。

1背景介紹

客戶要將生產(chǎn)環(huán)境上一套副本集架構(gòu)的 MongoDB 進(jìn)行遷移,數(shù)據(jù)量 240GB 左右。經(jīng)過測試,全量備份耗時(shí) 3.5 小時(shí),恢復(fù)耗時(shí) 4.5小時(shí)。

為了減少割接時(shí)間,采取全量 + 增量 Oplog 的遷移方式。提前一天進(jìn)行全備,割接當(dāng)天只需備份增量的 Oplog 恢復(fù)即可,可大幅減少割接窗口。

2實(shí)操過程

查看 Oplog 信息

檢查并評估生產(chǎn)環(huán)境 Oplog 的產(chǎn)生信息,以防全量和增量備份期間產(chǎn)生的 Oplog 被覆蓋掉。

mongo> db.getReplicationInfo()
{
"logSizeMB" : 20480,
"usedMB" : 20374.38,
"timeDiff" : 7074665,
"timeDiffHours" : 1965.18,
"tFirst" : "Fri Feb 24 2023 18:36:32 GMT+0800 (CST)",
"tLast" : "Wed May 17 2023 15:47:37 GMT+0800 (CST)",
"now" : "Wed May 17 2023 15:47:43 GMT+0800 (CST)"
}

可以看出在 1965.18h 的運(yùn)行中,產(chǎn)生了 20374.38MB 大小的 Oplog。

全量備份

全量備份并拷貝備份期間產(chǎn)生的 Oplog 用來增量還原。

#!/bin/bash

user=admin
password=123
host=127.0.0.1
port=27017
outputdir=/data/mongobak_`date +%F`
authenticationdatabase=admin
start_time=`date +%s`
mongodump -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase --oplog --gzip -o $outputdir
stop_time=`date +%s`
duration=$((stop_time-start_time)) 
echo "Spend times: $duration seconds"

全量恢復(fù)

利用全備進(jìn)行數(shù)據(jù)恢復(fù)。

#!/bin/bash

start_time=`date +%s`
user=admin
password=123
host=127.0.0.1
port=27017
authenticationdatabase=admin
mongorestore -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase --oplogReplay --gzip /data/mongobak_2023-07-17
stop_time=`date +%s`
duration=$((stop_time-start_time)) 
echo "Spend times: $duration seconds"

提取增量備份開始的時(shí)間點(diǎn)

全備備份出來的 Oplog,可以利用 bsondump 工具將 bson 轉(zhuǎn)換為 json 格式,查看備份時(shí)間產(chǎn)生的最后的 Oplog 的時(shí)間戳,根據(jù)此時(shí)間戳來進(jìn)行增量的 Oplog 備份。

shell> cd /data/ mongobak_2023-07-17
shell> mv oplog.bson oplog.bson.gz
shell> gzip -d oplog.bson.gz
shell> bsondump --pretty oplog.bson > op.json

查看 op.json 文件,找出增量備份開始的時(shí)間點(diǎn)。

"ts": {
          "$timestamp": {
                      "t": 1686669429,
                      "i": 4
          }
},

增量備份

備份 Oplog(時(shí)間戳大于上一次全備結(jié)束時(shí)的時(shí)間)。

#!/bin/bash

user=admin
password=123
host=127.0.0.1
port=27017
outputdir=/tmp/oplog_`date +%F`
authenticationdatabase=admin
start_time=`date +%s`
mongodump -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase -d local -c oplog.rs -q '{"ts":{"$gt": {"$timestamp":{"t":1686669429, "i":4}}}}' -o $outputdir
stop_time=`date +%s`
duration=$((stop_time-start_time)) 
echo "Spend times: $duration seconds"

增量恢復(fù)

#!/bin/bash
user=admin
password=123
host=127.0.0.1
port=27017
authenticationdatabase=admin
start_time=`date +%s`
mongorestore -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase --oplogReplay  /data/oplog_2023-07-17
stop_time=`date +%s`
duration=$((stop_time-start_time)) 
echo "Spend times: $duration seconds"

增量遷移后業(yè)務(wù)文檔數(shù)量對比

分別在源端和目標(biāo)端運(yùn)行腳本,檢查遷移完成后業(yè)務(wù)數(shù)據(jù)庫下文檔數(shù)量是否一致。

#!/bin/bash

user=admin
password=123
host=127.0.0.1
port=27017
authenticationdatabase=admin
mpid=`pidof mongod`
tooldir=`dirname $(ls -l /proc/$mpid/exe | awk '{print $11}')`
database=$(echo "show dbs" | $tooldir/mongo -uadmin --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase  --quiet |awk '{print $1}'| sed -E '/^admin$|^config$|^local$/d')
for db in $database
do
  collections=$(echo -e "use $db\n show collections" | $tooldir/mongo -u $user --host $host --port $port -p $password  $authenticationdatabase --quiet | sed '/switched to db/d')
  for table in $collections
  do
    count=$(echo -e "use $db\n db.$table.count()" | $tooldir/mongo -u $user --host $host --port $port -p $password  --authenticationDatabase $authenticationdatabase  --quiet | sed '/switched to db/d')
    echo "$db.$table have $count documents"
  done
done

源端運(yùn)行結(jié)果:

圖片圖片

目標(biāo)端運(yùn)行結(jié)果:

圖片圖片

3注意事項(xiàng)

  • 使用 secondary 備份時(shí),在割接停止業(yè)務(wù)后,增量備份前,首先檢查下從庫與主庫的延時(shí),確保主從沒有延時(shí),防止備份出的數(shù)據(jù)和主庫不一致。
  • 如果全備時(shí)指定了 gzip,在提取時(shí)間戳?xí)r要重命名 oplog.bson 為 oplog.bson.gz,然后解壓,再利用 bsondump 工具解析 bson 文件,否則會(huì)報(bào)錯(cuò)。
責(zé)任編輯:武曉燕 來源: 愛可生開源社區(qū)
相關(guān)推薦

2013-01-29 10:45:19

MongoDB

2023-10-23 19:35:33

數(shù)據(jù)節(jié)點(diǎn)MongoDB

2010-07-26 15:14:04

telnet服務(wù)

2018-12-13 09:09:49

MongoDB運(yùn)維部署

2011-04-11 09:53:06

Oracle

2023-03-14 23:24:27

Mongodb副本集架構(gòu)

2009-10-21 09:58:28

桌面LinuxLinux操作系統(tǒng)

2011-05-27 10:02:42

Shell

2019-04-01 07:51:21

2009-06-15 14:00:44

Java小程序驗(yàn)證

2010-07-21 16:53:33

telnet命令

2009-06-11 16:11:26

Java運(yùn)算器一則運(yùn)算

2023-04-30 00:02:40

K8Skubelet數(shù)據(jù)

2022-12-15 17:50:14

2013-03-11 10:37:08

2012-04-18 18:12:47

iPad Mini

2019-12-03 10:40:25

LinuxCPU網(wǎng)絡(luò)調(diào)優(yōu)

2010-01-06 10:38:16

Linux安裝JDK

2025-04-30 01:00:00

2010-04-12 09:36:29

Oacle merge
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號