mongodb的备份和还原
young / / / 阅读量

mongodump与mongoexport的区别:

mongodump导出的是bson格式,是二进制形式,不过可以使用mongo自带的bsondump命令查看里面的数据,而mongoexport导出的则是文本,可以是csv、json格式。

JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。

在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。

JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。

mongodump备份

在Mongodb中我们一般用mongodump命令来备份MongoDB数据。

备份单个表

mongodump -u  user_name -p password  --port 27010 --authenticationDatabase admin -d db_name -c table_name -o /backup/table_name.bak

备份单个库

mongodump -u  user_name -p password  --port 27010 --authenticationDatabase admin -d db_name  -o  /backup/db_name/

备份所有库

mongodump -u  user_name -p password  --port 27010 --authenticationDatabase admin -o /backup/all_db/
# 备份所有库推荐使用添加--oplog参数的命令,这样的备份是基于某一时间点的快照,只能用于备份全部库时才可用,单库和单表不适用:
mongodump -u  user_name -p password  --port 27010 --authenticationDatabase admin  --oplog -o  /backup/all_db/ 
# 同时,恢复时也要加上--oplogReplay参数,具体命令如下(下面是恢复单库的命令):
mongorestore  -u  user_name -p password  --port 27010 --authenticationDatabase admin --oplogReplay  /backup/all_db/

mongodump在mongo关闭时,也是可以备份的,不过需要指定数据目录,命令为:

mongodump  --dbpath  /data/db

mongorestore还原

mongorestore 用于还原mongodump导出的数据

恢复单个库

mongorestore   -u  user_name -p password  --port 27010 --authenticationDatabase admin db_name   /backup/db_name/

恢复所有库

mongorestore   -u  user_name -p password  --port 27010 --authenticationDatabase admin  /backup/all_db/

恢复单表

mongorestore  -u  user_name -p password  --port 27010 --authenticationDatabase admin -d db_name -c table_name /backup/table_name/table_name/table_name.bson

注:

mongorestore恢复数据默认是追加,如打算先删除后导入,可以加上–drop参数,不过添加–drop参数后,会将数据库数据清空后再导入,如果数据库备份后又新加入了数据,也会将新加的数据删除,它不像mysql有一个存在的判断。

mongoexport备份

导出文件格式支持csv和json,不同的是csv格式必须显示的指定要导出的字段,如:

mongoexport --port 21017 -u user -p'password' -d db_name -c table_name  -f col1,col2,col3 --type=csv -o ./table_name.csv --authenticationDatabase db_name

而json格式则不需要

# 导出所有字段数据
mongoexport --port 21017 -u user -p'password' -d db_name -c table_name -o ./table_name.json --type=json --authenticationDatabase db_name

mongoimport还原

命令用来导入数据,语法和mongoexport差不多
将table_name.csv里的数据导入到db_name数据库中的table_name数据表中,如果table_name数据表不存在则自动创建

# headerline    仅适用于导入csv,tsv格式的数据,表示文件中的第一行作为数据头
# upsert  以新增或者更新的方式来导入数据
mongoimport --port 21017 -u user -p'password' -d db_name -c table_name --type=csv --file ./table_name.csv --headerline --upsert

备份脚本

#!/bin/bash
mongo_bin=/usr/local/mongodb/bin
back_path=/root/mongodbbackup
file_date=`date +"%Y-%m-%d"`
$mongo_bin}/mongodump -h 127.0.0.1:27010 -o ${back_path}/${file_date}
tar zcvPf ${back_path}/${file_date}.tar.gz ${back_path}/${file_date} --remove-files
find /root/mongodbbackup/* -type f -mtime +10 -exec rm -f {} \;
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章