一 MongoDB备份
1.1 备份概述
mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport。
mongodump备份的原理是经过一次查询获取当前服务器快照,并将快照写入磁盘中,所以这种方式保存的也不是实时的。在获取快照后,服务器还会有数据写入,为了保证备份的安全,能够利用fsync锁使服务器数据暂时写入缓存中。
mongodb备份恢复方式一般有如下三种:
- 文件快照方式
- 复制数据文件方式
- 使用mongodump和mongorestore方式
1.2 文件快照方式
此方式相对简单,须要系统文件支持快照和mongod必须启用journal。能够在任什么时候刻建立快照。
恢复时,确保没有运行mongod,执行快照恢复操做命令,而后启动mongod进程,mongod将重放journal日志。
1.3 复制数据文件方式
直接拷贝数据目录下的一切文件,可是在拷贝过程当中必须阻止数据文件发生更改。所以须要对数据库加锁,以防止数据写入。
1 > db.fsyncLock() #锁定,将阻塞写入操做,并将脏数据刷新到磁盘上,确保数据一致。
2 # cp -R /data/db/* /backup #拷贝数据文件到备份目录下
3 > db.fsyncUnlock() #文件复制完成后,对数据库进行解锁,容许写操做
注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,不然可能没法链接而须要从新启动mongod服务。
恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,而后启动mongod
1 # cp -R /backup/* /data/db/
2 # mongod -f mongod.conf
1.4 mongodump数据备份
在Mongodb中咱们使用mongodump命令来备份MongoDB数据。该命令能够导出全部数据到指定目录中。
mongodump命令能够经过参数指定导出的数据量级转存的服务器。
语法格式:
1 > mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
参数解释:
参数
|
全称
|
默认值
|
参考释义
|
|
--help
|
|
查看mongodump命令的使用帮助
|
|
--version
|
|
返回mongodump的版本号
|
-h
|
--host <hostname><:port>
|
localhost:27017
|
指定mongod要链接的主机名及端口号
|
-u
|
--username <username>
|
|
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
|
-p
|
--password <password>
|
|
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
|
-d
|
--db <database>
|
|
指定要备份的数据库。若是不指定,mongodump会将此实例中的全部数据库备份。
|
-c
|
--collection <collection>
|
|
指定要备份的集合。若是不指定,则会将指定数据库或实例中的全部集合备份。
|
|
--gzip
|
|
压缩输出,若是mongodump指定导出到目录,则该选项会将每一个文件都压缩,并添加.gz后缀;
若是mongodump指定导出到文档或标准输出流,则该选项会压缩到文档或输出流中。
|
-o
|
--out <path>
|
|
指定导出数据的目录路径,如不指定,则mongodump默认将文件输出到dump所在的工做目录中。该选项不能和--archive一块儿使用
|
提示:
若是没有用户谁,能够去掉-u和-p;
若是导出本机的数据库,能够去掉-h;
若是是默认端口,能够去掉--port;
若是想导出全部数据库,能够去掉-d。
fsyncLock与mongodump不能一块儿使用,若是数据库被锁定了,mongodump将永远挂起。使用mongodump备份比较慢。一般mongodump用来备份单个数据库、集合、子集合。
1.5 mongorestore数据恢复
在Mongodb中咱们使用mongorestore命令来恢复MongoDB数据。该命令能够从指定目录恢复相应数据。
语法格式:
1 > mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 <path> --dir 文件存在路径
参数解释:
参数
|
全称
|
默认值
|
参考释义
|
|
--help
|
|
查看mongorestore命令的使用帮助
|
|
--version
|
|
返回mongorestore的版本号
|
-h
|
--host <hostname><:port>
|
localhost:27017
|
指定mongod要链接的主机名及端口号
|
-u
|
--username <username>
|
|
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
|
-p
|
--password <password>
|
|
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
|
-d
|
--db <database>
|
|
指定须要恢复的数据库实例。能够和备份时的数据库名称不同。
|
-c
|
--collection <collection>
|
|
指定要备份的集合。若是不指定,则会将指定数据库或实例中的全部集合备份。
|
|
<path>
|
|
mongorestore 最后的一个参数,设置备份数据实例所在位置。
|
|
--dir <path>
|
|
指定备份数据所在的目录路径。
|
|
--drop
|
|
恢复的时候,先删除当前数据,而后恢复备份的数据。就是说,备份后至恢复操做中间时间段添加修改的数据都会被删除,慎用!
|
注意:不能同时指定 <path> 和 --dir 选项。
二 mongodump备份实例
2.1 模拟插入数据
1 [root@client ~]# mongo --host 172.24.8.71 -u admin -p admin
2 > use admin
3 > db.grantRolesToUser( "admin",[{ role: "dbOwner",db:"mydb" }])
4 > db.grantRolesToUser( "admin",[{ role: "restore",db:"admin" }])
5 > db.grantRolesToUser( "admin",[{ role: "backup",db:"admin" }])
6 > use mydb
7 > for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
2.2 备份全部数据
1 [root@client ~]# mongodump --host 172.24.8.71 -u admin -p admin -o allbackup/
2.3 备份指定数据
1 [root@client ~]# mongodump --host 172.24.8.71 -d mydb -u admin -p admin -o mydbbackup/ --authenticationDatabase admin
2.4 备份指定集合
1 [root@client ~]# mongodump --host 172.24.8.71 -d mydb -c user -u admin -p admin -o usercobackup/ --authenticationDatabase admin
提示:严格来讲,备份只须要读权限便可。
三 mongorestore还原实例
3.1 恢复全部数据库
1 [root@client ~]# mongorestore --host 172.24.8.71 -u admin -p admin --dir allbackup/
3.2 恢复指定数据
1 [root@client ~]# mongorestore --host 172.24.8.71 -d mydb -u admin -p admin --dir mydbbackup/mydb/ --authenticationDatabase admin
3.3 恢复指定集合
1 [root@client ~]# mongorestore --host 172.24.8.71 -d mydb -c user -u admin -p admin --dir usercobackup/mydb/user.bson --authenticationDatabase admin
提示:严格来讲,恢复只须要读写权限便可。
四 mongoexport导出
4.1 mongoexport导出
参数
|
全称
|
默认值
|
参考释义
|
|
--help
|
|
查看mongoexport命令的使用帮助
|
|
--version
|
|
返回mongoexport的版本号
|
-h
|
--host <hostname><:port>
|
localhost:27017
|
指定mongod要链接的主机名及端口号
|
-u
|
--username <username>
|
|
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
|
-p
|
--password <password>
|
|
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
|
-d
|
--db <database>
|
|
指定须要导出的数据库实例。
|
-c
|
--collection <collection>
|
|
指定要导出的集合。
|
-f
|
--fields <field1[,field2]>
|
|
指定导出时只导出一个或多个字段,导出多个时,须要使用逗号分隔;
|
-q
|
--query <JSON>
|
|
提供查询文档做为导出数据源
|
|
--type<string>
|
json
|
指定要导出的文件类型,可选值:json,csv
|
-o
|
--out <file>
|
|
指定要导出的文件路径(含文件名),若是不指定,则会导出为标准输出(例如stdout)
|
4.2 导出指定数据库集合
1 [root@client ~]# mongoexport --host 172.24.8.71 -d mydb -c user -u admin -p admin -o allexport/myuser.json --authenticationDatabase admin
五 mongoimport导入
5.1 mongoimport导出
参数
|
全称
|
可选值
|
参考释义
|
|
--help
|
|
查看mongoimport命令的使用帮助
|
|
--version
|
|
返回mongoimport的版本号
|
-h
|
--host <hostname><:port>
|
localhost:27017(默认值)
|
指定mongod要链接的主机名及端口号
|
-u
|
--username <username>
|
|
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
|
-p
|
--password <password>
|
|
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
|
-d
|
--db <database>
|
|
指定须要导入的数据库实例。
|
-c
|
--collection <collection>
|
|
指定要导入的集合。
|
|
--file <path>
|
|
指定导入数据所在的目录路径。
|
|
--drop
|
|
恢复的时候,先删除当前数据,而后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
|
|
--headerline
|
|
使用第一行做为字段名称
|
|
--ignoreBlanks
|
|
忽略要导入文件中的空字段,若是不指定该参数,则默认会读取空字段并建立
|
|
--type <json|csv|tsv>
|
json(默认值),csv,tsv
|
要导入的文件类型,另外支持tsv
|
|
--mode <insert|upsert|merge>
|
insert(插入),
upsert(替换数据库中的文档),
merge(合并)
|
指定导入过程当中,如何应对数据库文档与导入文件中的文档匹配
(默认会使用_id字段对比)的状况
|
5.2 导入指定数据库集合
1 [root@client ~]# mongoimport --host 172.24.8.71 -d mydb -c user -u admin -p admin --file allexport/myuser.json --authenticationDatabase admin
六 复制集和分片备份恢复
参考:https://blog.csdn.net/zhu_tianwei/article/details/44514673
七 其余备份方式
7.1 脚本备份
1 #!/bin/sh
2 DUMP=mongodump
3 OUT_DIR=/data/backup/mongod/tmp // 备份文件临时目录
4 TAR_DIR=/data/backup/mongod // 备份文件正式目录
5 DATE=`date +%Y_%m_%d_%H_%M_%S` // 备份文件将以备份时间保存
6 DB_USER=<USER> // 数据库操做员
7 DB_PASS=<PASSWORD> // 数据库操做员密码
8 DAYS=14 // 保留最新14天的备份
9 TAR_BAK="mongod_bak_$DATE.tar.gz" // 备份文件命名格式
10 cd $OUT_DIR // 建立文件夹
11 rm -rf $OUT_DIR/* // 清空临时目录
12 mkdir -p $OUT_DIR/$DATE // 建立本次备份文件夹
13 $DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE // 执行备份命令
14 tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE // 将备份文件打包放入正式目录
15 find $TAR_DIR/ -mtime +$DAYS -delete // 删除14天前的旧备份
16 chmod +x ~/crontab/mongod_bak.sh
17 vi /etc/crontab
18 0 2 * * * root ~/crontab/mongod_bak.sh
参考连接:https://blog.csdn.net/zhu_tianwei/article/details/44514673
https://brickyang.github.io/2017/03/02/Linux-%E8%87%AA%E5%8A%A8%E5%A4%87%E4%BB%BD-MongoDB/
https://segmentfault.com/a/1190000006236494