MongoDB数据备份的2组命令(非常详细)
在 MongoDB 中,有两组命令可以实现数据的备份,它们分别是 mongoexport 和 mongoimport、mongodump 和 mongorestore。
下面我们通过一个案例,展示 mongoexport 如何进行数据备份:
代码如下:
接下来我们使用 mongoimport 命令从 JSON 或 CSV 文件中将数据导入 MongoDB。案例代码如下:
我们列出了一些 mongoimport 命令常用的参数,如下表所示:
下面我们通过一些案例来说明 mongodump 和 mongorestore 命令的使用方法。
将 people 数据库备份到当前目录,并进行压缩,代码如下:
将刚备份的 people 数据库恢复到 people2 数据库中,原来的 people2 数据库则被删除,代码如下:
若要恢复单个集合,则将 --dir 参数值指定为具体的备份文件即可,代码如下:
MongoDB mongoexport和mongoimport命令
mongoexport 是数据导出命令,可以将数据库中的集合导出为指定的文件格式(如 JSON、CSV),实现数据的备份。该命令可使用的参数可以借助下面的命令查看:mongoexport --helpmongoexport 命令的参数很多,下表整理了一些常用的参数:
参数 | 参数描述 |
---|---|
-h | 数据库所在服务器主机 |
--port | 监听的端口号 |
-u | 数据库授权的用户 |
-p | 用户的密码 |
--authenticationDatabase | 认证用户的数据库,存储了用户的授权证书 |
-d | 指定具体的数据库 |
-c | 指定数据库中具体的集合 |
-f | 导出的字段,多个字段用逗号分隔 |
--type | 导出的文件格式 |
-o | 导出的文件名 |
-q | 导出数据的查询条件 |
下面我们通过一个案例,展示 mongoexport 如何进行数据备份:
- 首先连接到分片集群的 mongos,创建一个用户 admin;
- 然后使用该用户将数据库 people 中的 records 集合备份到 people_records.csv 文件中,导出字段 name 和 age 的数据。
代码如下:
root@master:~# mongo --host my_router --port 27017 mongos> show dbs; admin 0.000GB config 0.002GB people 0.000GB mongos> use admin; switched to db admin mongos> db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"} ]}) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] } mongos> exit root@master:~# mongoexport --host my_router --port 27017 -u admin -p admin --authenticationDatabase admin -d people -c records --type csv -f name,age -o people_records.csv 2023-08-14T12:20:30.806+0800 connected to: mongodb://my_router:27017/ 2023-08-14T12:20:30.961+0800 exported 4 records root@master:~# ls Downloads people_records.csv temp
接下来我们使用 mongoimport 命令从 JSON 或 CSV 文件中将数据导入 MongoDB。案例代码如下:
root@master:~# mongoimport --host my_router --port 27017 -u admin -p admin --authenticationDatabase admin -d people -c testImport --type csv --headerline --file people_records.csv --drop 2023-08-14T13:02:45.181+0800 connected to: mongodb://my_router:27017/ 2023-08-14T13:02:45.181+0800 dropping: people.testImport 2023-08-14T13:02:45.197+08005 document(s) imported successfully. 0 document(s) failed to import.如果指定数据库或者集合不存在,那么 MongoDB 会自动创建该数据库或集合。
我们列出了一些 mongoimport 命令常用的参数,如下表所示:
参数 | 参数描述 |
---|---|
-h | 数据库所在服务器主机 |
--port | 监听的端口号 |
-u | 数据库授权的用户 |
-p | 用户的密码 |
-d | 指定具体的数据库 |
-c | 指定数据库中具体的集合 |
-f | 指定导入的字段,多个字段用逗号分隔 |
--file | 导入的文件名 |
--type | 导入的文件格式 JSON/CSV |
--headerline | 第一行作为字段列表,此时不能再用 -f |
--authenticationDatabase | 认证用户的数据库,存储了用户的授权证书 |
--drop | 导入前先删除集合 |
MongoDB mongodump和mongorestore命令
mongodump 命令导出数据的参数,其功能和 mongoexport 命令差不多;mongorestore 命令导入数据的参数,其功能和 mongoimport 命令差不多,读者在使用时可以通过 --help 命令来查看具体的帮助信息。下面我们通过一些案例来说明 mongodump 和 mongorestore 命令的使用方法。
将 people 数据库备份到当前目录,并进行压缩,代码如下:
root@master:~# mongodump --host my_router --port 27017 -u admin -p admin --authenticationDatabase admin -d people -o ./ --gzip 2023-08-14T13:20:52.827+0800 writing people.records to people/ reco-rds bson.gz 2023-08-14T13:20:52.828+0800 writing people.testImport to people/te-st Import.bson.gz 2023-08-14T13:20:52.837+0800 done dumping people.records (4 docs) 2023-08-14T13:20:52.837+0800 done dumping people.testImport (5 docs)上述代码备份的是整个 people 数据库。若要备份单个集合,则通过 -c 参数指定具体的集合名称即可。
将刚备份的 people 数据库恢复到 people2 数据库中,原来的 people2 数据库则被删除,代码如下:
root@master:~# mongorestore --host my_router --port 27017 -u admin -p admin --authenticationDatabase admin -d people2 --drop --dir people/ --gzip
若要恢复单个集合,则将 --dir 参数值指定为具体的备份文件即可,代码如下:
root@master:~# mongorestore –host my_router –port 27017 –u admin –p admin –authentication Database admin –d people2 –c records –drop --dir people/record-s. bson.gz –gzip以上两组命令都可以进行数据的备份和恢复,那么它们之间有什么区别呢?具体对比如下表所示:
MongoDB 工具 | 作用 | 特点 |
---|---|---|
mongoexport / mongoimport | 导入 / 导出 JSON 文件 |
不受 MongoDB 版本影响; 可读性强、体积较大; 只保留数据部分,不保留索引等元数据 |
mongodump / mongorestore | 导入 / 导出 BSON 文件 |
可读性差、体积小; 受 MongoDB 版本影响; 二进制文件 |