test.php.bak,MongoDB熱備份工具:解決官方版備份缺陷

賀春旸,凡普金科DBA團隊負責人,《MySQL管理之道:性能調優、高可用與監控》第一、二版作者,曾任職于中國移動飛信、安卓機鋒網。致力于MariaDB、MongoDB等開源技術的研究,主要負責數據庫性能調優、監控和架構設計。

工具下載:點擊文末【閱讀原文】或登錄云盤

前言

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

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

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

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

如果你的oplog設置過小,很有可能在備份恢復這段時間,oplog被覆蓋重寫,那么你將永遠無法加入副本集集群里。

概述

Percona MongoDB 3.2版本默認開始支持WiredTiger引擎的在線熱備份,解決了官方版只能通過mongodump邏輯備份這一缺陷。

參考文獻:

注意事項

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

2、可以替換一臺從庫為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里運行即可。

1、環境準備:

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

2、php-mongo驅動安裝:

shell> pecl install mongo

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

3、創建mongodb超級用戶權限(備份時使用)

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

4、修改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);

......

5、前臺運行:

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

6、寫入系統crontab里

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

7、不支持遠程備份,需將備份腳本部署在從庫里。如果你想把數據備份到遠程,可以采用NFS等文件系統mount掛載上。

下載方式

登錄云盤鏈接:

即可下載工具腳本

現通過dbaplus社群免費為大家提供Percona MongoDB HotBackup熱備份工具的下載使用。若使用過程中有任何問題或建議,可隨時與我們聯系,歡迎大家試用!

相關鏈接:

更多免費工具&腳本

97741210ef2a77991ea2640f76ffbf39.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457160.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zookeeper工作原理、安裝配置、工具命令簡介

1 Zookeeper簡介Zookeeper 是分布式服務框架,主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等等。 ZooKeeper是一個分布式的,開放源碼的分布式應用程序…

流式大數據處理的三種框架:Storm,Spark和Samza

許多分布式計算系統都可以實時或接近實時地處理大數據流。本文將對三種Apache框架分別進行簡單介紹,然后嘗試快速、高度概述其異同。 Apache Storm 在Storm中,先要設計一個用于實時計算的圖狀結構,我們稱之為拓撲(topology&#x…

models.ForeignKey( ,on_delete=models.CASCADE)? ? # 關聯外鍵

# 關聯外鍵 sgrade models.ForeignKey("Grades",on_deletemodels.CASCADE) 版本跟新后忘記加on_deletemodels.CASCADE 報錯困擾了很久 多讀報錯信息 from django.db import models# Create your models here. class Grades(models.Model):gname models.Cha…

java 產生無重復的隨機數,Java創建無重復的隨機數

小編典典最簡單的方法是創建一個可能數字的列表(1..20或任何數字),然后用對其進行混洗Collections.shuffle。然后,只需考慮你想要的許多元素。如果你的范圍最終等于你需要的元素數量(例如,用于洗牌的卡片),則這非常好。如果你想要…

linux_bash_shell_cheat_sheet(自譯)

【說明】 發現錯誤或不足請務必聯系我!!! linux_bash_shell_cheat_sheet.pdf (英文原本以及譯本下載,鏈接失效請私信或郵箱聯系) 轉載于:https://www.cnblogs.com/15ho/p/5947534.html

Day04-循環和列表

循環和列表 一、循環(***) 1.1 概念 廣義:一個周期現象或者重復出現的情況,這種狀態被稱為循環 狹義:在滿足條件的情況下,反復執行某一段代碼,在編程語言中出現的這種現象被稱為循環。被反復執行的這段代碼被稱為循環…

熱血街頭Java,下載_我愛法語 V3.01 多國語言版_6z6z下載站

我愛法語是一款功能強大的法語電子詞典工具。融合了法漢,漢法,法法,英法,法英,英漢,法意等各類詞庫。該工具使用靈活,操作簡單,充分吸收了法漢、漢法、法法、英法、法英、英漢、法意…

【demo練習二】:WPF依賴屬性的練習

2016-10-11 依賴屬性demo小樣&#xff1a; 要求&#xff1a;在窗口中點擊按鈕&#xff0c;利用設置“依賴屬性”把Label和TextBox控件里的屬性值進行改變。 MainWindow.xaml代碼&#xff1a; <Window x:Class"依賴屬性1.MainWindow" xmlns"http://schemas.m…

BZOJ 1087 [SCOI2005]互不侵犯King ——狀壓DP

【題目分析】 沉迷水題&#xff0c;吃棗藥丸。 【代碼】 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int ij;i<k;i) #define ll long long int cot[512],c1[512]…

Django中object.all

前言 先拋出一個問題。銀行就相當于一個數據庫&#xff0c;你去銀行取錢存錢辦卡銷卡&#xff0c;是你告訴銀行柜員方便還是你自己去操作電腦辦卡取卡方便&#xff1f;&#xff08;你還不一定會&#xff0c;假設自動存款機還沒發明&#xff09;&#xff0c;object在數據庫中就…

java中為什么設計包裝類,Java 中為什么要設計包裝類

最近文章更新頻率慢了&#xff0c;因為最近在準備暑期實習&#xff0c;之前尋思著一邊復習一邊寫文章&#xff0c;兩全其美。后來發現一篇讀起來比較舒服的文章寫出來加上配圖得花上四五個小時甚至更多&#xff0c;但這個知識點我可能半個小時就能復習完了&#xff0c;春招在即…

bfc

BFC 已經是一個耳聽熟聞的詞語了&#xff0c;網上有許多關于 BFC 的文章&#xff0c;介紹了如何觸發 BFC 以及 BFC 的一些用處&#xff08;如清浮動&#xff0c;防止 margin 重疊等&#xff09;。雖然我知道如何利用 BFC 解決這些問題&#xff0c;但當別人問我 BFC 是什么&…

Python語法異常 Exception

常見異常&#xff1a;Exception 所有異常的基類AttributeError 特性應用或賦值失敗時引發IOError 試圖打開不存在的文件時引發IndexError 在使用序列中不存在的索引時引發KeyError …

Python的Django框架中forms表單類的使用方法詳解

Form Form的驗證思路 前端&#xff1a;form表單 后臺&#xff1a;創建form類&#xff0c;當請求到來時&#xff0c;先匹配&#xff0c;匹配出正確和錯誤信息。 Django的Form驗證實例&#xff1a; 創建project&#xff0c;進行基礎配置文件配置 settings.py settings.py之…

java讀取gpx文件,從Leaflet導出GPX文件

我想要做的是讓用戶通過選擇Leaflet中的一些GeoJson功能來創建GPX文件 . 我這樣做的方法是創建一個新的GeoJson圖層來存儲所選的特征&#xff0c;然后用一個名為togpx(https://github.com/tyrasd/togpx)的插件將其轉換為gpx . 現在我有一個gpx文件&#xff0c;但我沒有t know h…

Mono Compatibility

The easiest way to describe what Mono currently supports is:Everything in .NET 4.5 except WPF, WWF, and with limited WCF and limited ASP.NET 4.5 async stack. System.Web and WCF are candidates for ‘almost immediate’ porting from the .NET reference source …

Python的Django框架中forms表單類的使用方法詳解2

用戶表單是Web端的一項基本功能,大而全的Django框架中自然帶有現成的基礎form對象,本文就Python的Django框架中forms表單類的使用方法詳解。 Form表單的功能 自動生成HTML表單元素檢查表單數據的合法性如果驗證錯誤&#xff0c;重新顯示表單&#xff08;數據不會重置&#xf…

生動形象的理解API是如何工作的!

API(Application Programming Interface,應用程序編程接口) 簡單來說&#xff0c;就是其他人開發出來一塊程序&#xff0c;你想用&#xff0c;他會告訴你調用哪個函數&#xff0c;給這個函數傳什么參數&#xff0c;然后又會返回給你一個什么樣的結果&#xff0c;你不需要知道他…

ann matlab,人工神經網絡ann及其matlab仿真.ppt

人工神經網絡ann及其matlab仿真人工神經網絡 的研究方法及應用劉 長 安2004. 12. 31 引 言 利用機器模仿人類的智能是長期以來人們認識自然、改造自然和認識自身的理想。 研究ANN目的&#xff1a; (1)探索和模擬人的感覺、思維和行為的規律&#xff0c;設計具有人類智能的計算機…

字符串與樹的結合

https://leetcode.com/problems/scramble-string/?tabDescription 雖然題目不常見&#xff0c;但是里面關于字符串調轉和遞歸的思路&#xff0c;還是很有代表性的。 https://discuss.leetcode.com/topic/14337/share-my-4ms-c-recursive-solution/2 這個解法也把里面關于遞歸的…