Percona MongoDB HotBackup熱備份工具

Percona MongoDB HotBackup熱備份工具php


前言:html

目前官方MongoDB社區版是不支持Hot Backup熱備份的,咱們只能經過mongodump等邏輯備份工具導出bson文件,再mongorestore導入,相似MySQL的mysqldump工具。mysql


在備份副本集時,咱們需指定--oplog選項記錄備份間產生的增量數據,相似mysqldump --single-transaction --master-data=2(作一致性快照並記錄當前的binlog點)。git


對副本集的成員恢復,需先切成單機版,mongorestore必須指定--oplogReplay選項,以恢復到某一時刻的快照,最後還需填充oplog(增量數據以哪一個位置點開始斷點續傳),mongorestore -d local -c oplog.rs dump/oplog.bson,最後一步再切爲副本集成員從新啓動。github


中小型數據庫備份起來簡單快捷,若是過TB級的數據量,那將是痛苦的。sql


若是你的oplog設置太小,頗有可能在備份恢復這段時間,oplog被覆蓋重寫,那麼你將永遠沒法加入副本集集羣裏。mongodb


概述:shell

Percona MongoDB3.2版本默認開始支持WiredTiger引擎的在線熱備份,解決了官方版只能經過mongodump邏輯備份這一缺陷。數據庫


參考文獻:ide

https://www.percona.com/doc/percona-server-for-mongodb/LATEST/hot-backup.html#hot-backup


注意事項:

一、要在當前dbpath中對數據庫進行熱備份,請在admin數據庫上以管理員身份運行createBackup命令,並指定備份目錄。

二、能夠替換一臺從庫爲Percona MongoDB,作備份使用。(我這裏實測是Percona MongoDB 3.4版本)


Percona MongoDB HotBackup熱備份原理:

你能夠想象成xtrabackup工具


備份:

一、首先會啓動一個後臺檢測的進程,實時檢測MongoDB Oplog的變化,一旦發現oplog有新的日誌寫入,馬上將日誌寫入到日誌文件WiredTiger.backup中(你能夠strings WiredTiger.backup查看oplog操做日誌的變化);

二、複製MongoDB dbpath的數據文件和索引文件到指定的備份目錄裏。

......


恢復:

一、將WiredTiger.backup日誌進行回放,將操做日誌變動應用到WiredTiger引擎裏,最終獲得一致性快照恢復。

二、把備份目錄裏的數據文件直接拷貝到你的dbpath下,而後啓動MongoDB便可,會自動接入副本集集羣。



這裏我封裝了一個PHP腳本,直接在SHELL裏運行便可。

一、環境準備:

shell> yum install -y php-pear php-devel php gcc openssl openssl-devel cyrus-sasl cyrus-sasl-devel


二、php-mongo驅動安裝:

shell> pecl install mongo

把extension=mongo.so加入到/etc/php.ini最後一行。


三、建立mongodb超級用戶權限(備份時使用)

db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})


四、修改pmongo_bak.php配置信息

//修改下面的配置信息**//

$user = "admin"; //使用root用戶權限

$pwd = '123456';

$host = '192.168.180.26'; //在從庫上熱備

$port = '27017';

$authdb = 'admin'; //權限認證數據庫

$BAKDIR = "/data/bak/";

$BAKDIR .= date('Y_m_d_H_i_s');

//下面的代碼不用修改**//

$m = new MongoBak($user,$pwd,$host,$port,$authdb,$BAKDIR);

......


五、前臺運行:

shell> php pmongo_bak.php(以root權限運行)


六、寫入系統crontab裏

00 01 * * * /usr/bin/php /root/php_mongodb/pmongo_bak.php > /root/php_mongodb/bak_status.log 2 >&1


七、不支持遠程備份,需將備份腳本部署在從庫裏。若是你想把數據備份到遠程,能夠採用NFS等文件系統mount掛載上。


下載地址:

https://github.com/hcymysql/PMongo-HotBackup

相關文章
相關標籤/搜索