1.1 备份概述
mongodb
数据备份和还原主要分为二种,一种是针对于库的mongodump
和mongorestore
,一种是针 对库中表的mongoexport
和mongoimport
。
mongodump
备份的原理是通过一次查询获取当前服务器快照,并将快照写入磁盘中,因此这种方式保 存的也不是实时的。在获取快照后,服务器还会有数据写入,为了保证备份的安全,可以利用fsync锁使 服务器数据暂时写入缓存中。
mongodb
备份恢复方式通常有以下三种:
- 文件快照方式
- 复制数据文件方式
- 使用
mongodump
和mongorestore
方式
1.2 文件快照方式
此方式相对简单,需要系统文件支持快照和mongod
必须启用journal
。
可以在任何时刻创建快照。 恢复时,确保没有运行mongod
,执行快照恢复操作命令,然后启动mongod
进程,mongod
重放 journal
日志。
1.3 复制文件方式
直接拷贝数据目录下的一切文件,但是在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库 加锁,以防止数据写入。
db.fsyncLock() #锁定,将阻塞写入操作,并将脏数据刷新到磁盘上,确保数据 一致。
cp -R /data/db/* /backup #拷贝数据文件到备份目录下
db.fsyncUnlock() #文件复制完成后,对数据库进行解锁,允许写操作
#注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,否则可能无法 连接而需要重新启动mongod服务。 恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,然后启动mongod
cp -R /backup/* /data/db/
mongod -f mongod.conf
1.4 Mongodump数据备份
在Mongodb
中我们使用mongodump
命令来备份MongoDB
数据。
该命令可以导出所有数据到指定目录 中。 mongodump
命令可以通过参数指定导出的数据量级转存的服务器。
命令格式如下
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
1.5 Mongorestore数据恢复
在Mongodb
中我们使用mongorestore
命令来恢复MongoDB
数据。该命令可以从指定目录恢复相应数据。
命令格式如下
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存储路径
1.6 定时备份脚本
定时任务进行每天备份
#!/bin/sh
DUMP=mongodump
OUT_DIR=/data/backup/mongod/tmp
TAR_DIR=/data/backup/mongod
DATE=`date +%Y_%m_%d_%H_%M_%S`
DB_USER=test
DB_PASS=test
DATABASE=test
DAYS=14
TAR_BAK="mongod_bak_$DATE.tar.gz"
cd $OUT_DIR
rm rf $OUT_DIR/
mkdir p $OUT_DIR/$DAT
$DUMP -h 192.168.0.135 --port 27017 -u $DB_USER -p $DB_PASS -d $DATABASE -o $OUT_DIR/$DATE
tar zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
find $TAR_DIR/ -mtime +$DAYS -delete
30 02 * * * sh /root/mongod_bak.sh