MongoDB的备份恢复命令
1 | mongoexport / mongoimport |
有以上两组命令在备份与恢复中进行使用。
一、mongoexport/mongoimport命令
1.1 导出工具mongoexport
Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
该命令的参数如下:
参数 | 参数说明 |
---|---|
-h | 指明数据库宿主机的IP |
-u | 指明数据库的用户名 |
-p | 指明数据库的密码 |
-d | 指明数据库的名字 |
-c | 指明collection的名字 |
-f | 指明要导出那些列 |
-o | 指明到要导出的文件名 |
-q | 指明导出数据的过滤条件 |
--type | 指定文件类型 |
--authenticationDatabase | 验证数据的名称 |
mongoexport 备份实践
备份app库下的vast集合
1 | mongoexport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast -o /home/mongod/backup/vasts.dat |
注:备份文件的名字可以自定义,默认导出了JSON格式的数据。
导出CSV格式的数据
1 | 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 |
1.2 导入工具mongoimport
Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。
该命令的参数如下:
参数 | 参数说明 |
---|---|
-h | 指明数据库宿主机的IP |
-u | 指明数据库的用户名 |
-p | 指明数据库的密码 |
-d | 指明数据库的名字 |
-c | 指明collection的名字 |
-f | 指明要导出那些列 |
-o | 指明到要导出的文件名 |
-q | 指明导出数据的过滤条件 |
--drop | 插入之前先删除原有的 |
--headerline | 指明第一行是列名,不需要导入。 |
-j | 同时运行的插入操作数(默认为1),并行 |
--authenticationDatabase | 验证数据的名称 |
mongoimport 恢复实践
将之前恢复的数据导入
1 | mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast --drop /home/mongod/backup/vasts.dat |
将之前恢复的CSV格式数据导入
1 | mongoimport -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d app -c vast --type=csv --headerline --file vast_csv.dat |
1.3 mysql数据迁移至mongodb数据库
将mysql数据库中的mysql下的user表导出。
1 | select user,host,password from mysql.user |
命令说明:
1 | into outfile '/tmp/user.csv' ------导出文件位置 |
查看导出内容
1 | [mongod@MongoDB tmp]$ cat user.csv |
在mongodb中导入数据
1 | 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 |
查看导入的内容
1 | [root@MongoDB tmp]# mongo --port 27017 |
到此数据迁移完成。
二、mongodump/mongorestore命令
2.1 mongodump备份工具
mongodump的参数与mongoexport的参数基本一致
参数 | 参数说明 |
---|---|
-h | 指明数据库宿主机的IP |
-u | 指明数据库的用户名 |
-p | 指明数据库的密码 |
-d | 指明数据库的名字 |
-c | 指明collection的名字 |
-o | 指明到要导出的文件名 |
-q | 指明导出数据的过滤条件 |
--authenticationDatabase | 验证数据的名称 |
--gzip | 备份时压缩 |
--oplog | use oplog for taking a point-in-time snapshot |
mongodump 参数实践
全库备份
1 | mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -o /home/mongod/backup/full |
备份test库
1 | mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -o /home/mongod/backup/ |
备份test库下的vast集合
1 | mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast -o /home/mongod/backup/ |
压缩备份库
1 | mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -o /home/mongod/backup/ --gzip |
压缩备份单表
1 | mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast -o /home/mongod/backup/ --gzip |
2.2 mongorestore恢复实践
mongorestore与mongoimport参数类似
参数 | 参数说明 |
---|---|
-h | 指明数据库宿主机的IP |
-u | 指明数据库的用户名 |
-p | 指明数据库的密码 |
-d | 指明数据库的名字 |
-c | 指明collection的名字 |
-o | 指明到要导出的文件名 |
-q | 指明导出数据的过滤条件 |
--authenticationDatabase | 验证数据的名称 |
--gzip | 备份时压缩 |
--oplog | use oplog for taking a point-in-time snapshot |
--drop | 恢复的时候把之前的集合drop掉 |
全库备份中恢复单库(基于之前的全库备份)
1 | mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop /home/mongod/backup/full/test/ |
恢复test库
1 | mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test /home/mongod/backup/test/ |
恢复test库下的vast集合
1 | mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast /home/mongod/backup/test/vast.bson |
--drop
参数实践恢复
1 | # 恢复单库 |
2.3 mongoexport/mongoimport与mongodump/mongorestore的对比
- mongoexport/mongoimport导入/导出的是JSON格式,而mongodump/mongorestore导入/导出的是BSON格式。
- JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
- 在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
- JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。