mongodb的备份、还原、导出、导入

有时候,我们需要将 mongodb 的数据进行备份和还原,然后采用 Navicat 这种可视化工具导出的数据集合会有一个问题,就是一个文档的字段里面如果包含对象,它是不能支持的。所以我们需要用到原生的命令来进行。

备份

1
mongodump -h IP --port 端口 -u 用户名 -p 密码 --authenticationDatabase 验证账号的数据库(一般是 admin) -d 数据库 -o 文件存在路径

如果不输入 -h 和 --port,表示使用默认的 IP 和端口

如果想导出所有的数据库,可以去掉 -d

如果 mongodb 设置了密码并且启用了验证,那必须输入 -u -p --authenticationDatabase 三个参数才行

可以使用 mongodump --help 来查看所有的命令

生成的结果目录为 文件存在的路径/数据库名称/数据库数据文件

还原

1
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --authenticationDatabase 验证账号的数据库(一般是 admin) --drop 文件存在路径

要注意的是,--drop 的路径和上面 -o 的路径不同,这儿是指数据库文件数据真正存放的位置.

导出表或者表中的部分字段

1
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -o 

-q 条件导出

-o 文件名

-f 导出指字段,以字号分割,-f name,email,age导出name,email,age这三个字段

-q 可以根查询条件导出,-q '{ "_id" : "10001" }'导出 uid 为 100 的数据

--csv 表示导出的文件格式为 csv 的,这个比较有用,因为大部分的关系型数据库都是支持 csv

--type json 表示导出的文件格式为 json 格式

导入表或者表中部分字段

1
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名

--upsert 表示插入或者更新现有的数据

致谢

本文借鉴于:https://segmentfault.com/a/1190000006236494