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:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
你不能同时指定
–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
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 | mkdir -p /data/backup/mongodb_bak/baknow |
修改文件属性,使其可执行
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