mongoDb的数据库备份与还原,数据导出及还原 mongodb
复制文件系统
冷备份:就是把mongod停了,然后拷贝相应的数据文件,最好是把一个数据库相应的数据文件夹完整的拷出,然后恢复的时候完整的拷入。
热备份:就是mongod在运行中,可以使用db.fsyncLock();来锁定数据库,然后进行数据文件的拷贝,拷贝完成后,使用db.fsyncUnLock();解除锁定。恢复的时候,需要把mongod停了,然后把文件拷入
使用mongodump来备份
这个方式有些缺点,比如速度慢,处理副本集的时候也很容易出问题。但对于单独的数据库和集合还是一个好选择的。
1:如果mongod在运行,只要指定mongod的端口即可:mongodump --port 20001,会在当前路下创建dump文件夹,里面存放dump的数据库,真正的数据在.bson文件里。
也可以-h指定主机和端口,-d指定数据库名字,-o指定输出的路经
2:如果mongod没有运行,使用--dbpath指定数据目录也可以
使用mongorestore来恢复
./mongorestore --port 20000 --drop dump/
--drop指定要删除服务器上的数据, dump/是存放备份数据的文件夹
-h指定主机和端口,-d指定数据库名字,-directoryperdb指定备份文件所在的位置,也可不配置这个,直接指定就好了
对副本集进行备份
建议对备份节点进行备份,最好是采用复制文件系统的方式, 停掉副本集 拷贝数据文件夹。
对分片集群进行备份
由于不可能对集群在某一时间点的完整状态快照,因此不太可能对正在运行的分片集群进行“完美的”备份。
因此对于分片集群进行备份恢复,更关注单个分片或者副本集的备份。
注意:要进行分片集备份,需要先关闭均衡器。
使用mongoexport来导出数据, 导出的数据文件就是 BJSON 串
./mongoexport -d mydb -c users -o ../databak/mydb.bak
1:-d :指定要导出的数据库
2:-c :指定要导出的集合
3:-o :指定输出的数据文件
还可以指定导出成csv格式的,比如:
./mongoexport -d mydb -c users -csv -f userId,name -o ../databak/mydb.csv
1:-csv :指定要导出成csv格式
2:-f :指定要导出的列
使用mongoimport来导入数据,示例
./mongoimport -d mydb -c users --file ../databak/mydb.bak
1:--file :用来指定导入的备份文件
如果要导入csv格式的话,如下:
./mongoimport -d mydb -c users --type csv --headerline --file ../databak/mydb.csv
如有疑问 请留言 欢迎提供建议
评论已有 0 条