Linux中mongodb定時遠程備份


下載mongodb

https://www.cnblogs.com/tartis/p/5291580.html

mongodb定時備份文檔

虛擬機報錯要改BIOS 虛擬技術開啟

進入root賬戶  su root 回車輸入密碼

一、創建MongoDB備份目錄

mkdir -p /data1/mongodb_bak/mongodb_bak_now

mkdir -p /data1/mongodb_bak/mongodb_bak_list  

 

二、 新建MongoDB數據庫備份腳本(/data1/mongodb_bak

創建:touch 文件名。

如:touch mongodtask.sh

編輯:sudo gedit mongodtask.sh  復制一下腳本代碼按需要修改

腳本:

#!/bin/bash

#backup MongoDB

#mongodump命令路徑

DUMP=/home/test/Downloads/mongodb/bin/mongodump

#臨時備份目錄

OUT_DIR=/data1/mongodb_bak/mongodb_bak_now

#備份存放路徑

TAR_DIR=/data1/mongodb_bak/mongodb_bak_list

#獲取當前系統時間

DATE=`date +%Y_%m_%d`

#數據庫賬號

DB_USER=root

#數據庫密碼

DB_PASS=p2005

#DAYS=15代表刪除15天前的備份,即只保留近15天的備份

DAYS=15

#最終保存的數據庫備份文件

TAR_BAK="mongodb_bak_$DATE.tar.gz"

cd $OUT_DIR

rm -rf $OUT_DIR/*

mkdir -p $OUT_DIR/$DATE

#備份全部數據庫

$DUMP -h 127.0.0.1:27017 -d test -o $OUT_DIR/$DATE

#壓縮為.tar.gz格式

tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE

#copy to  192.168.33.129

scp $TAR_DIR/$TAR_BAK root@192.168.33.129:/data/mongodb_bak

#刪除15天前的備份文件

find $TAR_DIR/ -mtime +$DAYS -delete

exit   

 

省略了連接文件存儲系統的賬號和密碼因為沒設若需要按照下面格式:

 

1.  $DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" -o $OUT_DIR/$DATE  

 

三、修改文件屬性,使其可執行(目錄下執行)

給該腳本賦權限:chmod +755 mongodtask.sh

四、 修改/etc/crontab,添加計划任務

1 進入編輯界面 記得要用root用戶登錄操作不然沒有權限

1

crontab -e

2 添加任務 分鍾開始執行MongoDB數據庫備份腳本

1

* * * * * /data1/mongodb_bak/mongodtask.sh

注意點:linux 下按A為編輯模式ctrl+z中斷操作

Ctrl+c 退出編輯模式

SHIFT+Z 兩次保存文件

或輸入冒號然后輸入wq

保存后退出,啟動

1

service crond start

設置開機自啟動

要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可

注意此腳本在mongodb開啟時有效,否則會出錯。

是否成功只需要看是否定時能在/data1/mongodb_bak 有文件生成

查看當前用戶的crontab,輸入 crontab -l

編輯crontab,輸入 crontab -e

刪除crontab,輸入 crontab -r   慎用

五、 A、B端免密登錄(為了進行copy不用輸入密碼和安全性)

一、證書登錄的過程:(了解性資料)

       1.客戶端生成證書的私鑰和公鑰。

         私鑰放在客戶端,公鑰上傳到服務端(遠程登陸端)。

        一般為了安全,訪問有黑客拷貝客戶端的私鑰,客戶端在生成私鑰時,會設置一個密碼,以后每次登錄ssh服務器時,客戶端都要輸入密碼解開私鑰(如果工作中,你使用了一個沒有密碼的私鑰,有一天服務器被黑了,你是跳到黃河都洗不清)。

        2.服務器添加信用公鑰。

        把客戶端生成的公鑰,上傳到ssh服務器,添加到指定的文件中,這樣,就完成ssh證書登錄的配置了。

        假設客戶端想通過私鑰要登錄其他ssh服務器,同理,可以把公鑰上傳到其他ssh服務器。

二、具體操作:(生成的證書在/root/.ssh/ 目錄下

環境:A通過ssh方式登陸B,即:A為本地機,B為遠程登陸server

           1.A機配置

          ①生成公鑰和私鑰

         ssh-keygen -t rsa           (連續三次回車,即在本地生成了公鑰和私鑰,不設置密碼)

 

         ②將公鑰拷到B端

先在B端/root/目錄下輸入:mkdir .ssh
         scp /root/.ssh/id_rsa.pub 192.168.33.129:./.ssh/id_rsa.pub 

2.  B機配置

輸入:vi /etc/ssh/sshd_config

找到

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

修改AuthorizedKeysFile      .ssh/authorized_keys2

去掉#號使其生效 需要輸入下面命令重啟下sshd

輸入:service sshd stop

輸入:service sshd start

①創建authorized_keys2文件命令如下:

touch /root/.ssh/authorized_keys2     

 (如果已經存在這個文件, 跳過這條)

 ②追加公鑰到authorized_keys2中命令如下:

 cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys2

(將id_rsa.pub的內容追加到 authorized_keys2 中)

 chmod 600 ~/.ssh/authorized_keys2 賦權

A端執行shell腳本看看是否能直接備份~如果不行百度

成功后rm -f /root/.ssh/id_rsa.pub 刪除 安全起見

附錄:MongoDB數據庫恢復

#恢復全部數據庫
mongorestore -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" --noIndexRestore --dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/
#恢復單個數據庫
mongorestore -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" --noIndexRestore -d dbname --dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/dbname

部分參數說明

--drop參數:恢復數據之前刪除原來的數據,避免數據重復

--noIndexRestore參數:恢復數據時不創建索引

--dir參數:數據庫備份目錄

-d參數:后面跟要恢復的數據庫名稱

或下面方法

mongodb 使用 mongorestore 命令來恢復備份的數據

1

>mongorestore -h <hostname><:port> -d dbname <path>

  1、--host <:port>, -h <:port>:MongoDB所在服務器地址,默認為: localhost:27017

  2、--db , -d :需要恢復的數據庫實例,例如:test,當然這個名稱也可以和備份時候的不一樣,比如test2

  3、--drop:恢復的時候,先刪除當前數據,然后恢復備份的數據。就是說,恢復后,備份后添加修改的數據都會被刪除,慎用哦!

  4、<path>:

最后的一個參數,設置備份數據所在位置,例如:c:datadumptest。

你不能同時指定 <path> 和 --dir 選項,--dir也可以設置備份目錄。

  5、--dir:指定備份的目錄

你不能同時指定 <path> 和 --dir 選項。

 

 

mongodb定時備份文檔

虛擬機報錯要改BIOS 虛擬技術開啟

進入root賬戶  su root 回車輸入密碼

一、創建MongoDB備份目錄

mkdir -p /data1/mongodb_bak/mongodb_bak_now

mkdir -p /data1/mongodb_bak/mongodb_bak_list  

 

二、 新建MongoDB數據庫備份腳本(/data1/mongodb_bak

創建:touch 文件名。

如:touch mongodtask.sh

編輯:sudo gedit mongodtask.sh  復制一下腳本代碼按需要修改

腳本:

#!/bin/bash

#backup MongoDB

#mongodump命令路徑

DUMP=/home/test/Downloads/mongodb/bin/mongodump

#臨時備份目錄

OUT_DIR=/data1/mongodb_bak/mongodb_bak_now

#備份存放路徑

TAR_DIR=/data1/mongodb_bak/mongodb_bak_list

#獲取當前系統時間

DATE=`date +%Y_%m_%d`

#數據庫賬號

DB_USER=root

#數據庫密碼

DB_PASS=p2005

#DAYS=15代表刪除15天前的備份,即只保留近15天的備份

DAYS=15

#最終保存的數據庫備份文件

TAR_BAK="mongodb_bak_$DATE.tar.gz"

cd $OUT_DIR

rm -rf $OUT_DIR/*

mkdir -p $OUT_DIR/$DATE

#備份全部數據庫

$DUMP -h 127.0.0.1:27017 -d test -o $OUT_DIR/$DATE

#壓縮為.tar.gz格式

tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE

#copy to  192.168.33.129

scp $TAR_DIR/$TAR_BAK root@192.168.33.129:/data/mongodb_bak

#刪除15天前的備份文件

find $TAR_DIR/ -mtime +$DAYS -delete

exit   

 

省略了連接文件存儲系統的賬號和密碼因為沒設若需要按照下面格式:

 

$DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" -o $OUT_DIR/$DATE  

 

三、修改文件屬性,使其可執行(目錄下執行)

給該腳本賦權限:chmod +755 mongodtask.sh

四、 修改/etc/crontab,添加計划任務

1 進入編輯界面 記得要用root用戶登錄操作不然沒有權限

1

crontab -e

2 添加任務 分鍾開始執行MongoDB數據庫備份腳本

1

* * * * * /data1/mongodb_bak/mongodtask.sh

注意點:linux 下按A為編輯模式ctrl+z中斷操作

Ctrl+c 退出編輯模式

SHIFT+Z 兩次保存文件

或輸入冒號然后輸入wq

保存后退出,啟動

1

service crond start

設置開機自啟動

要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可

注意此腳本在mongodb開啟時有效,否則會出錯。

是否成功只需要看是否定時能在/data1/mongodb_bak 有文件生成

查看當前用戶的crontab,輸入 crontab -l

編輯crontab,輸入 crontab -e

刪除crontab,輸入 crontab -r   慎用

五、 A、B端免密登錄(為了進行copy不用輸入密碼和安全性)

一、證書登錄的過程:(了解性資料)

       1.客戶端生成證書的私鑰和公鑰。

         私鑰放在客戶端,公鑰上傳到服務端(遠程登陸端)。

        一般為了安全,訪問有黑客拷貝客戶端的私鑰,客戶端在生成私鑰時,會設置一個密碼,以后每次登錄ssh服務器時,客戶端都要輸入密碼解開私鑰(如果工作中,你使用了一個沒有密碼的私鑰,有一天服務器被黑了,你是跳到黃河都洗不清)。

        2.服務器添加信用公鑰。

        把客戶端生成的公鑰,上傳到ssh服務器,添加到指定的文件中,這樣,就完成ssh證書登錄的配置了。

        假設客戶端想通過私鑰要登錄其他ssh服務器,同理,可以把公鑰上傳到其他ssh服務器。

二、具體操作:(生成的證書在/root/.ssh/ 目錄下

環境:A通過ssh方式登陸B,即:A為本地機,B為遠程登陸server

           1.A機配置

          ①生成公鑰和私鑰

         ssh-keygen -t rsa           (連續三次回車,即在本地生成了公鑰和私鑰,不設置密碼)

 

         ②將公鑰拷到B端

先在B端/root/目錄下輸入:mkdir .ssh
         scp /root/.ssh/id_rsa.pub 192.168.33.129:./.ssh/id_rsa.pub 

2.  B機配置

輸入:vi /etc/ssh/sshd_config

找到

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

修改AuthorizedKeysFile      .ssh/authorized_keys2

去掉#號使其生效 需要輸入下面命令重啟下sshd

輸入:service sshd stop

輸入:service sshd start

①創建authorized_keys2文件命令如下:

touch /root/.ssh/authorized_keys2     

 (如果已經存在這個文件, 跳過這條)

 ②追加公鑰到authorized_keys2中命令如下:

 cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys2

(將id_rsa.pub的內容追加到 authorized_keys2 中)

 chmod 600 ~/.ssh/authorized_keys2 賦權

A端執行shell腳本看看是否能直接備份~如果不行百度

成功后rm -f /root/.ssh/id_rsa.pub 刪除 安全起見

附錄:MongoDB數據庫恢復

#恢復全部數據庫
mongorestore -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" --noIndexRestore --dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/
#恢復單個數據庫
mongorestore -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" --noIndexRestore -d dbname --dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/dbname

部分參數說明

--drop參數:恢復數據之前刪除原來的數據,避免數據重復

--noIndexRestore參數:恢復數據時不創建索引

--dir參數:數據庫備份目錄

-d參數:后面跟要恢復的數據庫名稱

或下面方法

mongodb 使用 mongorestore 命令來恢復備份的數據

1

>mongorestore -h <hostname><:port> -d dbname <path>

 如果失敗:可以在目錄下./mongorestore -h <hostname><:port> -d dbname <path>

  1、--host <:port>, -h <:port>:MongoDB所在服務器地址,默認為: localhost:27017

  2、--db , -d :需要恢復的數據庫實例,例如:test,當然這個名稱也可以和備份時候的不一樣,比如test2

  3、--drop:恢復的時候,先刪除當前數據,然后恢復備份的數據。就是說,恢復后,備份后添加修改的數據都會被刪除,慎用哦!

  4、<path>:

最后的一個參數,設置備份數據所在位置,例如:c:datadumptest。

你不能同時指定 <path> 和 --dir 選項,--dir也可以設置備份目錄。

  5、--dir:指定備份的目錄

你不能同時指定 <path> 和 --dir 選項。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM