Mongodb备份与恢复
&备份
1、整个库备份
# mongodump -uhuoqiu -phuoqiuapp -h 127.0.0.1:27017 -d saturn --gzip --archive=/root/data/saturn_`date +%F_%H-%M-%S`.gz
!-u :指定用户,用于备份的用户必须对数据库有读的权限。
!-p: 指定用户密码
!-h:指定数据库服务器ip和端口,例如:ip:port
!-d: 指定要备份的数据库名称,
!--gzip: 启动gzip压缩功能
!--archive:指定备份的文件,使用方法 --archive=/root/data/saturn_`date +%F_%H-%M-%S`.gz
@用于备份的目录必须要在一个大的磁盘上,一面空间不够影响使用。
2、备份整个collection
1)备份为bson格式的文件,使用命令mongodump。
#/data/mongodb/bin/mongodump -uhqms -phqms123 -h 10.10.111.192:27017 -c users --db saturn -o /data/mongodata/
!-u :指定用户,用于备份的用户必须对数据库有读的权限。
!-p: 指定用户密码
!-h:指定数据库服务器ip和端口,例如:ip:port
!-db: 指定数据库名称
!-c: 指定要备份的collection的名称
!-o:指定输出的文件,
2)mongoexport默认导出为json格式的文件。
#mongoexport -uhuoqiu -phuoqiuapp -h 127.0.0.1:27017 -d saturn -c mycol -o /root/data/mycol-`date +%F_%H-%M-%S`.json
!-u :指定用户,用于备份的用户必须对数据库有读的权限。
!-p: 指定用户密码
!-h:指定数据库服务器ip和端口,例如:ip:port
!-d: 指定数据库名称
!-c: 指定要备份的collection的名称
!-o:指定输出的文件,
!--type: 指定输出类型,默认为json格式。
3、备份某个collection里面的某个字段
例如导出mycol里面的id字段,导出为csv文件
#mongoexport -uhuoqiu -phuoqiuapp -h 127.0.0.1:27017 -d saturn -c mycol --type csv -f "id" -o /root/data/mycol-`date +%F_%H-%M-%S`.csv
! -d 数据库名
! -c collection名
! -o 输出的文件名
! --type 输出的格式,默认为json
! -f 输出的字段,如果--type为csv,则需要加上 -f "字段名"
!-q 过滤某个条件:例如:-q '{"function" : "test100"}'
#mongoexport -h127.0.0.1:27017 -uhuoqiu -phuoqiuapp -d saturn -c mycol --csv -f id,function -q '{"function" : "test100"}' -o /root/data/oplog.rs-`date +%F_%H-%M-%S`.csv
@恢复
1、整个库恢复
#mongorestore -uhuoqiu -phuoqiuapp --host 127.0.0.1:27017 -d saturn --gzip --archive=/root/data/saturn_2017-07-13_22-02-15.gz
2、基于collection的恢复
!使用mongoimport导入,具体参数如下:
1.1,还原整表导出的非csv文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名
重点说一下--upsert,其他参数上面的命令已有提到,--upsert 插入或者更新现有数据
1.2,还原部分字段的导出文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsertFields 字段 --drop 文件名
--upsertFields根--upsert一样
1.3,还原导出的csv文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --type 类型 --headerline --upsert --drop 文件名
!!!慎用—drop选项。
1.1恢复整个表
!使用mongorestore恢复表:
#mongorestore -h 192.168.1.12:27017 -uhuoqiu -phuoqiuapp -c mycol -d saturn /data/mongodata/saturn/mycol.bson
! 如果需要整表替换的,执行如下命令:
#mongoimport -h 192.168.1.12:27017 -uhuoqiu -phuoqiuapp -d saturn -c mycol --upsert --drop /root/data/mycol_2017-07-14_18-00-35.json
!如果是插入或者更新现有的表,执行如下命令:
#mongoimport -h 192.168.1.12:27017 -uhuoqiu -phuoqiuapp -d saturn -c mycol --upsert /root/data/mycol_2017-07-14_18-00-35.json
!如果是还原部分字段,执行如下命令:
# mongoimport -h 192.168.1.12:27017 -uhuoqiu -phuoqiuapp -d saturn -c mycol –upsertFields user,name /root/data/mycol_2017-07-14_18-00-35.json
!还原csv文件
# mongoimport -h 192.168.1.12:27017 -uhuoqiu -phuoqiuapp -d saturn -c mycol --type csv --headerline --upsert --drop /root/data/mycol_2017-07-14_18-00-35.csv
3、将数据库进行重命名
连接到mongo上面
切换到需要操作的库上面
>db.adminCommand({renameCollection: "<source_namespaces>", to: "<target_namespace>" ,dropTarget:true|false})
dropTarget:有两个值:true和false,source_namespace是源库名.collection名,target_namespace是目标库名.目标collection名
>db.adminCommand({renameCollection: "test.orders", to: "test.orders2014" })
test是库名,orders、orders2014是collection名。如果target source的库不存在,那么会将source 的collection全部copy过去。如果目标库是存在的,则需要加上dropTarget:true
>db.adminCommand({renameCollection: "test.orders", to: "dxhy.orders" })
上面的这个语句就是将test库里面的orders拷贝到新的库dxhy里面。只要将test库里面所有的collection都执行一次上面的命令就完成了数据库的重命名。