1. 介绍

使用mongodump/mongoexport 命令来备份MongoDB数据。使用mongorestore/mongoimport命令来还原MongoDB备份数据。

mongoexport/mongoimport与mongodump/mongorestore的对比

  • mongoexport/mongoimport导入/导出的是JSON格式,而mongodump/mongorestore导入/导出的是BSON格式。
  • JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
  • 跨版本的mongodump/mongorestore并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
  • JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。

准则

  • 任意两次数据备份的时间间隔(第一次备份开始到第二次备份结束)不能超过oplog时间窗口覆盖范围。(不能太短)

在docker下使用mongodb命令

docker exec -it mongodb /bin/bash  
cd /use/bin/

mongoexport

可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。

参数

参数说明

-h

指明数据库宿主机的IP

-u

指明数据库的用户名

-p

指明数据库的密码

-d

指明数据库的名字

-c

指明collection的名字

-f

指明要导出那些列

-o

指明到要导出的文件名

-q

指明导出数据的过滤条件

--type

指定文件类型

--authenticationDatabase

验证数据的名称

mongoimport

参数

参数说明

-h

指明数据库宿主机的IP

-u

指明数据库的用户名

-p

指明数据库的密码

-d

指明数据库的名字

-c

指明collection的名字

-f

指明要导出那些列

-o

指明到要导出的文件名

-q

指明导出数据的过滤条件

--drop

插入之前先删除原有的

--headerline

指明第一行是列名,不需要导入。

-j

同时运行的插入操作数(默认为1),并行

--authenticationDatabase

验证数据的名称

# 默认导出json格式
# 备份app库下的vast集合
mongoexport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast -o /home/mongod/backup/vasts.dat

# 恢复
mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d app -c vast  --drop /home/mongod/backup/vasts.dat

# 导出CSV格式
mongoexport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d app -c vast --type=csv -f id,name -o /home/mongod/backup/vast_csv.dat

# 恢复CSV格式
mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast --type=csv --headerline --file vast_csv.dat

把mysql数据导入mongodb中

# mysql 导出数据
select user,host,password from mysql.user
into outfile '/tmp/user.csv'    #------导出文件位置 
fields terminated by ','        #------字段间以,号分隔
optionally enclosed by '"'      #------字段用"号括起
escaped by '"'                  #------字段中使用的转义符为"
lines terminated by '\r\n';     #------行以\r\n结束


#导入mongodb
mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c user -f user,host,password  --type=csv --file /tmp/user.csv

mongodump

参数

参数说明

-h

指明数据库宿主机的IP

-u

指明数据库的用户名

-p

指明数据库的密码

-d

指明数据库的名字

-c

指明collection的名字

-o

指明到要导出的文件名

-q

指明导出数据的过滤条件

--authenticationDatabase

验证数据的名称

--gzip

备份时压缩

--oplog

use oplog for taking a point-in-time snapshot

mongorestore

参数

参数说明

-h

指明数据库宿主机的IP

-u

指明数据库的用户名

-p

指明数据库的密码

-d

指明数据库的名字

-c

指明collection的名字

-o

指明到要导出的文件名

-q

指明导出数据的过滤条件

--authenticationDatabase

验证数据的名称

--gzip

备份时压缩

--oplog

use oplog for taking a point-in-time snapshot

--drop

恢复的时候把之前的集合drop掉

# 全库备份/恢复
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -o /home/mongod/backup/full

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop  /home/mongod/backup/full/test/

# 备份test库/恢复
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -o /home/mongod/backup/

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test /home/mongod/backup/test/

# 备份test库下的vast集合/恢复
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -c vast -o /home/mongod/backup/

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast /home/mongod/backup/test/vast.bson

# 压缩备份库
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -o /home/mongod/backup/ --gzip

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop /home/mongod/backup/test/

# 压缩备份单表
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin  -d test -c vast -o /home/mongod/backup/ --gzip

mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast --drop /home/mongod/backup/test/vast.bson