mongodb備份和恢復:mongodump/mongorestore ( 二)


1 手動備份

mongo3.0手動備份命令:
mongodump -h localhost:27017 --authenticationDatabase "admin" -o /data/backup/dump/2019_01_09

mongorestore -h localhost:27017 /data/backup/dump/2019_01_09

2 Mac自動備份腳本

mac本地正常運行備份mongodb數據庫的腳本是,其中可以which命令查看命令路徑path:


#!/bin/bash

/usr/local/bin/mongo --version > mongo_version.txt
DUMP=/usr/local/bin/mongodump    #mongodump命令路徑,非常重要,不然/bin/bash找不到路徑
OUT_DIR=/data/backup/temp   #臨時備份目錄
TAR_DIR=/data/backup/final    #備份存放路徑
TAR_BAK="mongodb_backup_$DATE.tar.gz"    #最終保存的數據庫備份文件

DATE=`date +%Y_%m_%d`   #獲取當前系統時間
DB_HOST=localhost:27017
DB_USER=    #數據庫賬號
DB_PASS=    #數據庫密碼
DAYS=15    #DAYS=15代表刪除15天前的備份,即只保留近15天的備份

# 進入臨時目錄刪空文件夾內容,根據當前時間重建文件
cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE

# 備份全部數據庫,並壓縮
echo "backup start"
$DUMP -h $DB_HOST --authenticationDatabase "admin" -o $OUT_DIR/$DATE
$DUMP -h $DB_HOST --authenticationDatabase "admin" -o $TAR_DIR/$DATE

# 壓縮為.tar.gz格式
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
# 解壓格式
# tar -xzvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE

#刪除DAYS天前的備份文件
find $TAR_DIR/ -mtime +$DAYS -delete

echo "backup end"

cd /data/backup
cmd=`date +%Y-%m-%d:%H:%M:%S`
cmd01=${cmd}
echo "$cmd01" >> time.txt
exit

  

crontab -e:每隔離一分鍾備份一次

 */1 * * * * * /data/backup/monbp.sh >> /data/backup/m.log 2>&1

crontab -e:每隔離4小時的第一分鍾備份一次,也即每4小時備份一次

1 */4 * * * * /data/backup/monbp.sh >> /data/backup/m.log 2>&1

3 ubuntu 自動備份腳本

#!/bin/sh

/usr/bin/mongo --version > /data/www/backup/mongo_version.txt
DUMP=/usr/bin/mongodump    #mongodump path
OUT_DIR=/data/www/backup/temp   #temp backup file
TAR_DIR=/data/www/backup/final    #backup file

DATE=`date +%Y_%m_%d_%H_%M_%S`
TAR_BAK="mongodb_backup_$DATE.tar.gz"

DB_HOST=localhost:27017
DB_USER=
DB_PASS=
DAYS=15

cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE


echo "backup start" >> /data/www/backup/bp.log
# $DUMP -h $DB_HOST --authenticationDatabase "admin" -o $OUT_DIR/$DATE
$DUMP -h $DB_HOST -o $OUT_DIR/$DATE
echo "ing...." >> /data/www/backup/bp.log
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
find $TAR_DIR/ -mtime +$DAYS -delete
echo "backup end" >> /data/www/backup/bp.log

cd /data/www/backup
cmd=`date +%Y-%m-%d:%H:%M:%S`
cmd01=${cmd}
echo "$cmd01" >> /data/www/backup/bp.log

exit

# 掛載docker-compose:/data/www/backup: /data/www/backup
# sudo docker exec -it 0be535e8f2ba /bin/bash
# crontab -e
# 1 */4 * * * /data/www/backup/monbp.sh >> /data/www/backup/bp.log 2>&1

4 攜帶mongodb的docker容器里部署自動備份腳本流程

假設docker系統為ubuntu:

(1)腳本搞到mongo-docker里面,最好掛載,比如docker-compose
volumes:
- /data/www/backup:/data/www/backup
然后進入容器:sudo docker exec -it 0be535e8f2ba /bin/bash
(2)安裝cron, 檢查狀態是否啟動
安裝:apt-get install cron
啟動:service cron start
檢查狀態:service cron status
檢查狀態:sudo launchctl list | grep cron
(3)確保安裝vi or vim,有時候crontab -e 會提示沒有編輯器或者沒有選擇編輯器
apt-get install -y vim
(4)編輯定時文件crontab -e,寫入保存,每隔4小時的第一分鍾備份一次,寫入日志到bp.log
1 */4 * * * /data/www/backup/monbp.sh >> /data/www/backup/bp.log 2>&1
(5)查看寫入日志文件bp.log測試,一般可以用簡單語句測試是否執行正常
比如每分鍾輸出一個時間
*/1 * * * * /bin/date >> /data/www/backup/datetest.log 2>&1

注意事項:

(1)linux系統中執行某個程序,出現~/bin/sh: xxx: not found
如果不指定,那么就使用默認的/bin/sh。一個是/bin/bash,一個是/bin/sh,而sh又是一個符號鏈接,指向/ bin/dash,ubuntu默認采用的是dash,一般通過/bin/sh的符號鏈接來指向,如果要切換它指向bash,Ubuntu 下缺省使用的是shell是dash,而不是bash。從/bin/sh軟連接的指向可以看出這點ls -l /bin/sh, 結果是
lrwxrwxrwx 1 root root 4 Feb 17 2016 /bin/sh -> dash。
dash shell 雖然比bash shell更輕便,但是它並不支持所有的語法,運行shell程序時,經常報錯。
解決辦法:

ln -sf /bin/bash /bin/sh
dpkg-reconfigure dash

還有一情況是自己的#!/bin/bash寫的格式不對,用下面的語法,如果顯示是正確的就是對的
head -1 mondp.sh | od -c
0000000 # ! / b i n / b a s h \n

 

(2)/bin/sh: /data/www/backup/monbp.sh: No such file or directory
但是/data/www/backup/monbp.sh 明明存在
仔細檢查文件名和路徑確定有沒有錯,一個字母也不要錯,尤其是眼睛容易混淆的bp,dp

還有一可能:
如果可執行文件xxx確實存在,很可能是缺少相關的庫文件。
在宿主機上,可以用交叉工具鏈中的readelf查看,例如:
mips-linux-gnu-readelf -a monbp.sh
在目標機上,可以用ldd查看依賴關系
ldd xxx

(3) mongo: command not found/mongodump: command not found
腳本的環境路徑變量不對,一定要用絕對路徑
mac版本-mongo: /usr/local/bin/mongo
Linux版本-mongo: /usr/bin/mongo

 


免責聲明!

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



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