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