mongodb备份与恢复

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:指定输出的文件,

2mongoexport默认导出为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都执行一次上面的命令就完成了数据库的重命名。

 

 

 

 

posted @ 2017-07-17 11:09  诗码者  阅读(383)  评论(0编辑  收藏  举报