1. 程式人生 > >MongoDB的備份與恢復

MongoDB的備份與恢復

1.1 MongoDB的常用命令

mongoexport / mongoimport
mongodump  / mongorestore

     有以上兩組命令在備份與恢復中進行使用。

1.1.1 匯出工具mongoexport

Mongodb中的mongoexport工具可以把一個collection匯出成JSON格式或CSV格式的檔案。可以通過引數指定匯出的資料項,也可以根據指定的條件匯出資料。

   該命令的引數如下:

引數

引數說明

-h

指明資料庫宿主機的IP

-u

指明資料庫的使用者名稱

-p

指明資料庫的密碼

-d

指明資料庫的名字

-c

指明collection的名字

-f

指明要匯出那些列

-o

指明到要匯出的檔名

-q

指明匯出資料的過濾條件

--type

指定檔案型別

--authenticationDatabase

驗證資料的名稱

mongoexport備份實踐

備份app庫下的vast集合

mongoexport -h 10.0
.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast -o /home/mongod/backup/vasts.dat

注:備份檔案的名字可以自定義,預設匯出了JSON格式的資料。

匯出CSV格式的資料

mongoexport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d app -c vast --type=csv -f id,name -o /home/mongod/backup/vast_csv.dat

1.1.2 匯入工具mongoimport

  Mongodb中的mongoimport工具可以把一個特定格式檔案中的內容匯入到指定的collection中。該工具可以匯入JSON格式資料,也可以匯入CSV格式資料。

該命令的引數如下:   

引數

引數說明

-h

指明資料庫宿主機的IP

-u

指明資料庫的使用者名稱

-p

指明資料庫的密碼

-d

指明資料庫的名字

-c

指明collection的名字

-f

指明要匯出那些列

-o

指明到要匯出的檔名

-q

指明匯出資料的過濾條件

--drop

插入之前先刪除原有的

--headerline

指明第一行是列名,不需要匯入。

-j

同時執行的插入運算元(預設為1),並行

--authenticationDatabase

驗證資料的名稱

mongoimport恢復實踐

將之前恢復的資料匯入

mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d app -c vast  --drop /home/mongod/backup/vasts.dat

將之前恢復的CSV格式資料匯入

mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast --type=csv --headerline --file vast_csv.dat

1.1.3 【實驗】mysql資料遷移至mongodb資料庫

將mysql資料庫中的mysql下的user表匯出。

select user,host,password from mysql.user
into outfile '/tmp/user.csv'
fields terminated by ','
optionally enclosed by '"'
escaped by '"' 
lines terminated by '\r\n';

命令說明:

into outfile '/tmp/user.csv'  ------匯出檔案位置  
fields terminated by ','     ------欄位間以,號分隔
optionally enclosed by '"'   ------欄位用"號括起
escaped by '"'            ------欄位中使用的轉義符為"
lines terminated by '\r\n';  ------行以\r\n結束

檢視匯出內容

[[email protected] tmp]$ cat user.csv 
"root","localhost",""
"root","db02",""
"root","127.0.0.1",""
"root","::1",""
"","localhost",""
"","db02",""
"repl","10.0.0.%","*23AE809DDACAF96AF0FD78ED04B6A265E05AA257"
"mha","10.0.0.%","*F4C9AC49A736981AE2739FC2F4A1FD92B4F07929"

在mongodb中匯入資料

mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c user -f user,host,password  --type=csv --file /tmp/user.csv

   檢視匯入的內容

[[email protected] tmp]# mongo --port 27017 
MongoDB shell version: 3.2.8
connecting to: 127.0.0.1:27017/test
> use app 
switched to db app
> db.user.find()
{ "_id" : ObjectId("5a53206b3b42ae4683180009"), "user" : "root\tlocalhost" }
{ "_id" : ObjectId("5a53206b3b42ae468318000a"), "user" : "root\tdb02" }
{ "_id" : ObjectId("5a53206b3b42ae468318000b"), "user" : "root\t127.0.0.1" }
{ "_id" : ObjectId("5a53206b3b42ae468318000c"), "user" : "root\t::1" }
{ "_id" : ObjectId("5a53206b3b42ae468318000d"), "user" : "localhost" }
{ "_id" : ObjectId("5a53206b3b42ae468318000e"), "user" : "db02" }
{ "_id" : ObjectId("5a53206b3b42ae468318000f"), "user" : "repl\t10.0.0.%\t*23AE809DDACAF96AF0FD78ED04B6A265E05AA257" }
{ "_id" : ObjectId("5a53206b3b42ae4683180010"), "user" : "mha\t10.0.0.%\t*F4C9AC49A736981AE2739FC2F4A1FD92B4F07929" }

     到此資料遷移完成。

1.2 mongodump/mongorestore實踐

1.2.1 mongodump備份工具

  mongodump的引數與mongoexport的引數基本一致 

引數

引數說明

-h

指明資料庫宿主機的IP

-u

指明資料庫的使用者名稱

-p

指明資料庫的密碼

-d

指明資料庫的名字

-c

指明collection的名字

-o

指明到要匯出的檔名

-q

指明匯出資料的過濾條件

--authenticationDatabase

驗證資料的名稱

--gzip

備份時壓縮

--oplog

use oplog for taking a point-in-time snapshot

mongodump引數實踐

全庫備份

mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -o /home/mongod/backup/full

備份test庫

mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -o /home/mongod/backup/

備份test庫下的vast集合

mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -c vast -o /home/mongod/backup/

壓縮備份庫

mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -o /home/mongod/backup/ --gzip

壓縮備份單表

mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -c vast -o /home/mongod/backup/ --gzip

1.2.2 mongorestore恢復實踐

  mongorestore與mongoimport引數類似 

引數

引數說明

-h

指明資料庫宿主機的IP

-u

指明資料庫的使用者名稱

-p

指明資料庫的密碼

-d

指明資料庫的名字

-c

指明collection的名字

-o

指明到要匯出的檔名

-q

指明匯出資料的過濾條件

--authenticationDatabase

驗證資料的名稱

--gzip

備份時壓縮

--oplog

use oplog for taking a point-in-time snapshot

--drop

恢復的時候把之前的集合drop

全庫備份中恢復單庫(基於之前的全庫備份)

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop  /home/mongod/backup/full/test/

恢復test庫

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test /home/mongod/backup/test/

恢復test庫下的vast集合

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast /home/mongod/backup/test/vast.bson

--drop引數實踐恢復

# 恢復單庫
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop /home/mongod/backup/test/
# 恢復單表
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast --drop /home/mongod/backup/test/vast.bson

1.2.3 mongoexport/mongoimport與mongodump/mongorestore的對比

  1. mongoexport/mongoimport匯入/匯出的是JSON格式,而mongodump/mongorestore匯入/匯出的是BSON格式。
  2. JSON可讀性強但體積較大,BSON則是二進位制檔案,體積小但對人類幾乎沒有可讀性。
  3. 在一些mongodb版本之間,BSON格式可能會隨版本不同而有所不同,所以不同版本之間用mongodump/mongorestore可能不會成功,具體要看版本之間的相容性。當無法使用BSON進行跨版本的資料遷移的時候,使用JSON格式即mongoexport/mongoimport是一個可選項。跨版本的mongodump/mongorestore並不推薦,實在要做請先檢查文件看兩個版本是否相容(大部分時候是的)。
  4. JSON雖然具有較好的跨版本通用性,但其只保留了資料部分,不保留索引,賬戶等其他基礎資訊。使用時應該注意。

1.3 MongoDB中的oplog

1.3.1 什麼是oplog

  MongoDB 的Replication是通過一個日誌來儲存寫操作的,這個日誌就叫做oplog。

  在預設情況下,oplog分配的是5%的空閒磁碟空間。通常而言,這是一種合理的設定。可以通過mongod --oplogSize來改變oplog的日誌大小。

  oplog是capped collection,因為oplog的特點(不能太多把磁碟填滿了,固定大小)需要,MongoDB才發明了capped collection(the oplog is actually the reason capped collections were invented). 定值大小的集合,oplogSizeMB: 2048,oplog是具有冪等性,執行過後的不會反覆執行。

  值得注意的是,oplog為replica set或者master/slave模式專用(standalone模式執行mongodb並不推薦)。

oplog的位置:

oplog在local庫: local。oplog

master/slave 架構下:local.oplog.$main;

replica sets 架構下:local.oplog.rs

引數說明

$ mongodump --help
 --oplog use oplog for taking a point-in-time snapshot

  該引數的主要作用是在匯出的同時生成一個oplog.bson檔案,存放在你開始進行dump到dump結束之間所有的oplog。

 

  簡單地說,在replica set中oplog是一個定容集合(capped collection),它的預設大小是磁碟空間的5%(可以通過--oplogSizeMB引數修改),位於local庫的db.oplog.rs,有興趣可以看看裡面到底有些什麼內容。

  其中記錄的是整個mongod例項一段時間內資料庫的所有變更(插入/更新/刪除)操作。當空間用完時新記錄自動覆蓋最老的記錄。

  所以從時間軸上看,oplog的覆蓋範圍大概是這樣的:

  

  其覆蓋範圍被稱作oplog時間視窗。需要注意的是,因為oplog是一個定容集合,所以時間視窗能覆蓋的範圍會因為你單位時間內的更新次數不同而變化。想要檢視當前的oplog時間視窗預計值.

sh1:PRIMARY> rs.printReplicationInfo()
configured oplog size:   2048MB   <--集合大小
log length start to end: 305451secs (84.85hrs)  <--預計視窗覆蓋時間
oplog first event time:  Thu Jan 04 2018 19:39:05 GMT+0800 (CST)
oplog last event time:   Mon Jan 08 2018 08:29:56 GMT+0800 (CST)
now:                     Mon Jan 08 2018 16:33:25 GMT+0800 (CST)

  oplog有一個非常重要的特性——冪等性(idempotent。即對一個數據集合,使用oplog中記錄的操作重放時,無論被重放多少次,其結果會是一樣的。

  舉例來說,如果oplog中記錄的是一個插入操作,並不會因為你重放了兩次,資料庫中就得到兩條相同的記錄這是一個很重要的特性.

1.3.2 oplog.bson作用

與oplog相關的引數

相關推薦

Mongodb 備份恢復

mongodb 逗哥自動化 mongodb 備份與恢復 一、備份數據[email protected]/* */ ~]# mongodump -h localhost -d admin -o /home/qiuyuetao/ 2017-08-10T16:07:51.188+0800wr

MongoDB備份恢復

rop In class mon 信息 服務 mgo cast .com 系統環境 服務器系統:Windows Server2012 R2 MongoDB:v3.4.4 可以通過命令:mongo -version 查看版本信息 場景:備份數據庫smp_maint

ubuntu系統下MongoDB 備份恢復

近日來苦於公司的專案在自己家裡跑不起來,想著先自己試試怎麼把資料庫備份恢復,其實想實現的是把公司資料庫怎一份到自己的電腦。相信你也會有這樣的需要,趕緊學起來吧! 一、MongoDB資料備份 mongodump命令指令碼語法如下:(命令列輸入) mongodump

分散式文件儲存資料庫之MongoDB備份恢復

  前文我們聊了下mongodb的訪問控制以及使用者建立和角色分配,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13974656.html;今天我們來了解下mongodb的備份與恢復   為什麼要備份?   備份的目的是對資料做冗餘的一種方式,它能夠讓我們在某種情況下

MongoDB的數據備份恢復

端口 exe 備份與恢復 地址 per 容災 數據備份與恢復 .exe dbn   一、數據備份操作     在實際的應用場景中,經常需要對業務數據進行備份以做容災準備,mongodb提供了備份和恢復的功能,分別是MongoDB下載目錄下的mongodump.exe和mon

MongoDB CookBook讀書筆記之備份恢復

MongoDBMongoDB中的mongodump和mongorestore兩個命令是針對數據庫進行備份與恢復,其用法非常簡單,具體語法可以查看幫助文件。 1、MongoDB備份 1.1 備份本機MongoDB 如果mongodump命令後,沒有指定-h和-p選項,則默認是備份本機的mongo數據庫。如下:

mongodb基礎(4)備份恢復

pro oss col mon 圖片 備份 cto ffffff 技術 1、備份2、恢復mongodb基礎(4)備份與恢復

MongoDB資料備份恢復以及安全認證

與其他資料庫一樣,MongoDB提供了資料備份和恢復以及資料匯入匯出的功能,在MongoDB安裝目錄的bin目錄下有,有以下exe檔案,下面我們主要使用這些工具: 一、資料備份與恢復 資料的備份與恢復主要使用到mongodump.exe和mongorestor

MongoDB 學習之備份恢復(十)

備份 語法 mongodump -h dbhost -d dbname -o dbdirectory -h:伺服器地址,也可以指定埠號 -d:需要備份的資料庫名稱 -o:備份的資料存放位置,此

Ubuntu 16.04 MongoDB資料庫備份恢復

1、切換到/usr/bin目錄下 cd /usr/bin 2、備份資料庫 mongodump -h ip:port -d 庫名 -o 備份目錄 例如:mongodump -h 127.0.0.1:27017 -d test -o /home/test 3、恢復資料庫

mongoDB 學習筆記純乾貨(mongoose、增刪改查、聚合、索引、連線、備份恢復、監控等等)

MongoDB - 簡介 MongoDB 是一個基於分散式檔案儲存的資料庫,由 C++ 語言編寫,旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。 MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富

linux系統下mongodb資料庫的備份恢復

Linux系統下:        備份資料庫:           1)cd到mongodb的bin目錄下               例如: cd  /usr/local/mongodb/bin          2) $ mongodump -h  資料庫所在pc的ip

MongoDB備份恢復

1.1 MongoDB的常用命令 mongoexport / mongoimport mongodump / mongorestore      有以上兩組命令在備份與恢復中進行使用。 1.1.1 匯出工具mongoexport Mongodb中的mongoexport工具可以把一

MongoDB-5:備份恢復

一、簡介     匯入和匯出可以操作本地的mongodb伺服器,也可以操作遠端的伺服器。所有有如下通用選項:         -h host 主機     

mongodb全庫備份恢復

一次伺服器異常事件導致mongodb服務掛掉無法重啟,報錯資訊: 2017-10-10T14:35:16.078+0800 I NETWORK [initandlisten] connection accepted from 192.168.1.52:55362 #4

mongodb資料庫備份恢復

資料庫的操作 mongodump -h 192.168.10.3 --port 27017 --oplog -o /var/data/ mongorestore -h 192.168.10.57:27017 --authenticationDatabase admin  /

Mongodb的同步、備份恢復(轉自鵬部落格)

Mongodb的主從同步: 1.建立資料庫目錄 mkdir /mongodb/masterdb mkdir /mongodb/slavedb_1 mkdir /mongodb/slavedb_2 2.分別啟動主從伺服器 啟動主伺服器監聽10000埠 ./b

Mongodb從0到1系列八: 備份恢復

13. 備份與恢復 13.1 備份 Mongodb中使用mongodump命令來備份MongoDB資料,常用語法如下: mongodump -h <hostname><:port> -d <database> -o &

MongoDB(三) 備份恢復

MongoDB備份與恢復 1. 備份 mongodump 用法: mongodump 將mongodb裡的資料匯出為.bson檔案 常用配置: 引數 用法 /help 列印幫助 /version 列印工具版

MongoDB資料備份恢復

備份:mongodump     mongodump --help #命令幫助 mongodump  -h 192.168.0.1 -u "mydbuser" -p "123" -d mydb  -o d:\mydb #備份192.168.0.1上的mydb庫到本地的 d:\mydb 目錄,如果mong