58

细述:通过Shell脚本定时自动备份MongoDB

 5 years ago
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 分别是脚本的名称。后面的是备份日志情况,如果有异常可以通过日志查询。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK