MongoDB定时备份

MongoDB数据备份

在MongoDB中我们使用mongodump命令来备份MongoDB数据
语法:

mongodump -h dbhost --port dbport -u user -p password -d dbname --authenticationDatabase admin -o dbdirectory 

-h MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017,-h 127.0.0.1:27017等同于-h 127.0.0.1 –port 27017
-d 需要备份的数据库实例,例如:test,没有指定即使备份全部数据库
-o 备份的数据存放位置,例如:c:datadump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
-u -p 如果有设置用户和密码,需要设置对应的用户名和密码,否则没有权限
–authenticationDatabase admin 验证权限

MongoDB数据恢复

mongodb 使用 mongorestore 命令来恢复备份的数据

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

–host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
–db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
–drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

:最后的一个参数,设置备份数据所在位置,例如:c:datadumptest。
你不能同时指定 和 –dir 选项,–dir也可以设置备份目录。
–dir:指定备份的目录
不能同时指定 和 –dir 选项。

MongoDB定时备份

Shell脚本

编写脚步mongodb_bak.sh,脚本内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh

DUMP=/data/mongodb/bin/mongodump
#mongodump备份文件执行路径
OUT_DIR=/data/backup/mongodb_bak/baknow
#临时备份目录
TAR_DIR=/data/backup/mongodb_bak/baklist
#备份存放路径

DATE=`date +%Y%m%d`
#获取当前系统时间
DB_HOST=127.0.0.1
#数据库地址
DB_PORT=27017
#数据库端口
DB_USER=***
#数据库账号
DB_PASS=******
#数据库密码
DAYS=30
#DAYS=30代表删除7天前的备份,即只保留最近7天的备份
TAR_BAK="mongodb_bak_$DATE.tar.gz"
#最终保存的数据库备份文件名

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

$DUMP -h $DB_HOST --port $DB_PORT -u $DB_USER -p $DB_PASS --authenticationDatabase admin -o $OUT_DIR/$DATE
#备份全部数据库
tar -zcvP -f $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE/*
#压缩为.tar.gz格式
find $TAR_DIR/ -mtime +$DAYS -delete
#删除30天前的备份文件

脚本中的目录、host、port、user、password等需要根据实际情况自行修改,脚本放在/data/scripts目录下

创建对应的备份目录

1
2
mkdir -p /data/backup/mongodb_bak/baknow
mkdir -p /data/backup/mongodb_bak/baklist

修改文件属性,使其可执行

1
chmod +x /data/scripts/mongodb_bak.sh

添加计划任务

执行crontab -e
添加

1
30 1 * * * root /data/scripts/mongodb_bak.sh

其中计划任务是每天1点半执行备份任务
crontab命令

1
2
3
4
/sbin/service crond start 
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload

以上分别为重启服务、停止服务、启动服务、重新加载配置的命令
修改过计划任务,需要执行restart或者reload

本文标题:MongoDB定时备份

文章作者:Francis

原始链接:http://www.cnops.com/posts/f146e600.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。