58
细述:通过Shell脚本定时自动备份MongoDB
source link: https://www.linuxprobe.com/shell-automatic-backup.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
近期在生产环境中碰到MongoDB数据库备份问题,所以整理了一下脚本,大家拿去尽管享用。
在MongoDB中创建备份账号
使用管理员账号登录MongoDB数据库:
[root@renwolecomdbs /]$ mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 > use admin switched to db admin 认证 > db.auth("admin","KM5d9KhJcW7O0lIAT")
下面开始创建MongoDB备份专有账号:
> db.createUser( { user: "renwolebackup", pwd: "RenwoleComACC", roles: [ { role: "backup", db: "admin" } ] } ) > exit
创建备份脚本存放目录及文件
$ mkdir -p /etc/init.d/mongo $ mkdir -p /apps/data/mongobackup_db $ vim /etc/init.d/mongo/mongo-bak 添加以下内容: #!/bin/bash sourcepath='' targetpath='/apps/data/mongobackup_db' nowtime=$(date +%Y%m%d) start() { ${sourcepath}mongodump --host 127.0.0.1:27017 -u renwolebackup -p renwolebackup --out ${targetpath}/${nowtime} } execute() { start if [ $? -eq 0 ] then echo "back successfully!" else echo "back failure!" fi } if [ ! -d "${targetpath}/${nowtime}/" ] then mkdir ${targetpath}/${nowtime} fi execute echo "============== back end ${nowtime} =============="
以上脚本中,请注意路径和文件夹根据你自己的需求修改。
注意:以上参数是我自己的实际使用情况,在使用前一定要认真阅读代码中的设置情况。
如果上面代码执行时报格式错误,请在Windwos下使用Notepad++转换为Unix格式即可,具体操作如下:
编辑-文档格式转换-转换为unix格式。
删除过期7天备份
$ vim /etc/init.d/mongo/mongo-delete 添加如下删除内容: #!/bin/bash targetpath='/apps/data/mongobackup_db' nowtime=$(date -d '-7 days' "+%Y%m%d") if [ -d "${targetpath}/${nowtime}/" ] then rm -rf "${targetpath}/${nowtime}/" echo "=======${targetpath}/${nowtime}/===删除成功==" fi echo "===$nowtime ==="
设置权限
如果不给执行权限则无法运行脚本:
$ cd /etc/init.d/mongo $ chmod +x mongo-bak $ chmod +x mongo-delete
添加定时任务
为达到每天备份的目的,请设置任务计划:
$ mkdir -p /var/log/mongobaklog $ crontab –e 添加以下自动备份和删除备份脚本内容: 30 03 * * * /etc/init.d/mongo/mongo-bak 1 > /var/log/mongobaklog/mongo-bak.log & 30 01 * * * /etc/init.d/mongo/mongo-delete 1 > /var/log/mongobaklog/mongo-delete &
前面所示分别为每日凌晨3.30和1.30执行该脚本的时间。
其中 mongo-bak 和 mongo-delete 分别是脚本的名称。后面的是备份日志情况,如果有异常可以通过日志查询。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK