news 2026/10/13 1:57:42

MongoDB 运维实战指南:安装部署、用户认证、备份恢复与数据导入导出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MongoDB 运维实战指南:安装部署、用户认证、备份恢复与数据导入导出
  • 文档
  • 教程
  • 数据库

【免费下载链接】db-tutorial

📚 后端程序员应该掌握的主流数据库知识

项目地址:https://gitcode.com/gh_mirrors/db/db-tutorial
点击查看免费下载

本文以 MongoDB 运维 为骨架,结合本仓库codes/javadb/mongodb模块中的 Spring Boot 连接配置、示例数据文件(books/products/students JSON)与集成测试,系统讲解 MongoDB 在 Windows/Linux 上的安装启动、管理员账号创建、mongodump/mongorestore备份恢复,以及mongoimport/mongoexport导入导出四大运维场景。读完本文,你将能独立完成一套 MongoDB 实例从部署、认证到数据迁移的全流程操作,并可直接用仓库自带的 JSON 数据文件演练导入导出。

MongoDB 安装

MongoDB 是 C++ 编写的基于文档的分布式数据库,数据以类似 JSON 的 BSON 格式存储。安装 MongoDB 后,核心的运维对象有两个守护进程:

  • mongod:数据库服务进程,负责存储与查询;
  • mongo(新版为mongosh):客户端 Shell,用于连接与操作。

Windows 安装

(1)下载并解压到本地:进入 MongoDB 官网的 Community Server 下载页面,选择合适的版本(例如 4.4.0)下载压缩包,解压到本地目录,如D:\Tools\Server\mongodb\mongodb-4.4.0。

(2)创建数据目录:MongoDB 默认将数据存储在db子目录下,但该目录不会自动创建,安装完成后需要手动创建,例如:

D:\Tools\Server\mongodb\mongodb-4.4.0\data\db

(3)运行 MongoDB 服务:在命令窗口中执行mongod并指定数据目录:

mongod --dbpath D:\Tools\Server\mongodb\mongodb-4.4.0\data\db

(4)客户端连接 MongoDB:另开一个命令窗口,运行mongo.exe(或新版mongosh)即可连接上本机 MongoDB 实例。默认监听地址为127.0.0.1:27017。

(5)配置 MongoDB 服务:如需开机自启,可在 Windows 服务管理器中注册服务,例如:

mongod --dbpath "D:\Tools\Server\mongodb\mongodb-4.4.0\data\db" --logpath "D:\Tools\Server\mongodb\mongodb-4.4.0\log\mongod.log" --install --serviceName MongoDB

之后可通过net start MongoDB启动服务。注意--install需要管理员权限,且logpath目录同样需要提前创建。

Linux 安装

(1)使用安装包安装:安装前需要先安装各 Linux 平台的依赖包。

Red Hat/CentOS:

sudo yum install libcurl openssl

Ubuntu 18.04 LTS ("Bionic") / Debian 10 "Buster":

sudo apt-get install libcurl4 openssl

Ubuntu 16.04 LTS ("Xenial") / Debian 9 "Stretch":

sudo apt-get install libcurl3 openssl

(2)创建数据目录:默认情况下 MongoDB 启动后会初始化以下两个目录:

  • 数据存储目录:/var/lib/mongodb
  • 日志文件目录:/var/log/mongodb

启动前可先创建这两个目录,并设置当前用户拥有读写权限:

sudo mkdir -p /var/lib/mongo sudo mkdir -p /var/log/mongodb sudo chown `whoami` /var/lib/mongo # 设置权限 sudo chown `whoami` /var/log/mongodb # 设置权限

(3)运行 MongoDB 服务:

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

其中--fork表示以后台守护进程方式运行。打开/var/log/mongodb/mongod.log看到以下信息,说明启动成功:

# tail -10f /var/log/mongodb/mongod.log 2020-07-09T12:20:17.391+0800 I NETWORK [listener] Listening on /tmp/mongodb-27017.sock 2020-07-09T12:20:17.392+0800 I NETWORK [listener] Listening on 127.0.0.1 2020-07-09T12:20:17.392+0800 I NETWORK [listener] waiting for connections on port 27017

日志中的waiting for connections on port 27017表明服务已就绪。生产环境更推荐将mongod注册为 systemd 服务,并统一使用配置文件(如/etc/mongod.conf)管理 dbpath、logpath、port、bindIp 等参数,便于随系统启动和集中运维。

(4)客户端连接 MongoDB:

cd /usr/local/mongodb4/bin ./mongo

与应用层连接配置的衔接

安装并启动 MongoDB 之后,应用即可通过连接串访问。以本仓库的 javadb/mongodb 模块为例,它基于 Spring Boot 2.6.3 与spring-boot-starter-data-mongodb构建,其连接配置位于 application.properties:

spring.data.mongodb.host = localhost spring.data.mongodb.port = 27017 spring.data.mongodb.database = test #spring.data.mongodb.username = #sprin.data.mongodb.password =

即默认连接localhost:27017上的test数据库;当开启用户认证后,只需去掉注释并填入创建的用户名与密码即可。仓库中多个ApplicationConfiguration(如 customer/ApplicationConfiguration.java)注释也印证了这一约定——测试配置连接的是名为test的 MongoDB 实例,并启用 Spring Data repositories。

设置用户名、密码

生产环境必须开启访问控制。在未开启认证的实例上,通过mongo客户端进入admin库创建管理员用户:

> use admin switched to db admin > db.createUser({"user":"root","pwd":"root","roles":[{"role":"userAdminAnyDatabase","db":"admin"}]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } >

要点说明:

  • use admin切换到系统管理库,管理员账号统一建在admin库中;
  • db.createUser的roles数组指定角色与所属库。userAdminAnyDatabase允许在任意数据库上管理用户;
  • 创建完成后,需要为mongod配置--auth参数(或在配置文件中设置security.authorization: enabled)并重启服务,认证才会真正生效;
  • 认证开启后,客户端连接需指定用户名、密码及认证库。对应到上文 application.properties 中的spring.data.mongodb.username/spring.data.mongodb.password,而命令行工具则需配合-u/-p与--authenticationDatabase admin使用(见下文导入导出部分)。

备份和恢复

备份恢复是运维的底线保障。MongoDB 提供一对配套命令:mongodump负责逻辑备份(导出 BSON/JSON),mongorestore负责恢复。

数据备份(mongodump)

mongodump命令可以导出全部或指定数据到目标目录,基本语法如下:

mongodump -h dbhost -d dbname -o dbdirectory

参数说明:

  • -h:MongoDB 所在服务器地址,例如127.0.0.1,也可以指定端口号127.0.0.1:27017;
  • -d:需要备份的数据库实例,例如test;
  • -o:备份数据的存放位置,例如c:\data\dump。该目录需提前创建;备份完成后系统会自动在dump目录下建立一个test目录,存放该数据库实例的备份数据。

mongodump常用可选参数列表:

语法描述实例
mongodump --host HOST_NAME --port PORT_NUMBER备份所有 MongoDB 数据mongodump --host runoob.com --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY通过数据文件路径离线备份mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME备份指定数据库中的指定集合mongodump --collection mycol --db test

补充:备份命令中若实例开启了认证,还需追加-u/-p与--authenticationDatabase admin;需要压缩落盘时可加--gzip,需要单一归档文件时可加--archive=backup.archive。

【示例】备份全量数据:

$ mongodump -h 127.0.0.1 --port 27017 -o test2 ... 2020-09-11T11:55:58.086+0800 done dumping test.company (18801 documents) 2020-09-11T11:56:00.725+0800 [#############...........] test.people 559101/1000000 (55.9%) 2020-09-11T11:56:03.725+0800 [###################.....] test.people 829496/1000000 (82.9%) 2020-09-11T11:56:06.725+0800 [#####################...] test.people 884614/1000000 (88.5%) 2020-09-11T11:56:08.088+0800 [########################] test.people 1000000/1000000 (100.0%) 2020-09-11T11:56:08.350+0800 done dumping test.people (1000000 documents)

【示例】备份指定数据库:

mongodump -h 127.0.0.1 --port 27017 -d admin -o test3

备份输出中的进度条[####...]展示每个集合的导出百分比,done dumping ... (N documents)表示该集合备份完成。

数据恢复(mongorestore)

mongorestore命令用于将mongodump产生的备份恢复到 MongoDB,基本语法如下:

mongorestore -h <hostname><:port> -d dbname <path>

参数说明:

  • --host <:port>/-h <:port>:MongoDB 所在服务器地址,默认为localhost:27017;
  • --db/-d:需要恢复的数据库实例,例如test,该名称可以与备份时的数据库名不同(如test2);
  • --drop:恢复前先删除当前集合数据再恢复备份数据。即恢复后,备份之后新增、修改的数据都会被删除,慎用;
  • <path>:mongorestore的最后一个参数,指定备份数据所在位置,例如c:\data\dump\test。<path>与--dir不能同时指定;
  • --dir:指定备份目录,与<path>二者只能选其一。

【示例】恢复备份(带--drop):

$ mongorestore -h 127.0.0.1 --port 27017 -d test --dir test --drop ... 2020-09-11T11:46:16.053+0800 finished restoring test.tweets (966 documents, 0 failures) 2020-09-11T11:46:18.256+0800 [###.....................] test.people 164MB/1.03GB (15.6%) 2020-09-11T11:46:21.255+0800 [########................] test.people 364MB/1.03GB (34.6%) 2020-09-11T11:46:24.256+0800 [############............] test.people 558MB/1.03GB (53.0%) 2020-09-11T11:46:27.255+0800 [###############.........] test.people 700MB/1.03GB (66.5%) 2020-09-11T11:46:30.257+0800 [###################.....] test.people 846MB/1.03GB (80.3%) 2020-09-11T11:46:33.255+0800 [######################..] test.people 990MB/1.03GB (94.0%) 2020-09-11T11:46:34.542+0800 [########################] test.people 1.03GB/1.03GB (100.0%) 2020-09-11T11:46:34.543+0800 no indexes to restore 2020-09-11T11:46:34.543+0800 finished restoring test.people (1000000 documents, 0 failures) 2020-09-11T11:46:34.544+0800 1000966 document(s) restored successfully. 0 document(s) failed to restore.

finished restoring ... (N documents, 0 failures)与末尾的N document(s) restored successfully是校验恢复是否完整的关键输出。注意恢复完成后通常需要重建索引(日志中的no indexes to restore提示备份未包含索引定义时尤其要留意)。

导入导出

与mongodump/mongorestore的 BSON 二进制格式不同,mongoimport和mongoexport面向 JSON/CSV 文本格式,适用于跨系统数据交换与日常调试。

重要限制:mongoimport和mongoexport并不能可靠地保存所有的富文本 BSON 数据类型,因为 JSON 仅能表示 BSON 支持类型的一个子集。因此,用这些工具导出导入的数据可能会丢失部分精度(例如Date、ObjectId、二进制等特殊类型),对精度敏感的数据应优先使用mongodump/mongorestore。

导入操作(mongoimport)

默认情况下,mongoimport将数据导入到本地主机端口 27017 上的 MongoDB 实例。要导入到其他主机或端口,通过--host和--port选项指定主机名或端口;使用--drop选项可在导入前删除已存在的同名集合,确保集合只包含本次导入的数据。

语法格式:

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

常用参数:-h/--host主机、--port端口、-u/-p用户名密码(认证开启时配合--authenticationDatabase)、-d/--db目标数据库、-c/--collection目标集合、--type文件类型(json/csv/tsv)、--headerline(csv 首行为字段名)、--upsert(按_id或--upsertFields指定的字段更新插入)、--drop(先删集合再导入)。

【示例】导入表数据(.dat为 JSON 文本文件):

$ mongoimport -h 127.0.0.1 --port 27017 -d test -c book --drop test/book.dat 2020-09-11T10:53:56.359+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T10:53:56.372+0800 dropping: test.book 2020-09-11T10:53:56.628+0800 431 document(s) imported successfully. 0 document(s) failed to import.

【示例】从 JSON 文件导入表数据(--upsert按_id更新插入,避免重复):

$ mongoimport -h 127.0.0.1 --port 27017 -d test -c student --upsert test/student.json 2020-09-11T11:02:55.907+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T11:02:56.068+0800 200 document(s) imported successfully. 0 document(s) failed to import.

【示例】从 CSV 文件导入表数据(--headerline将首行解析为字段名):

$ mongoimport -h 127.0.0.1 --port 27017 -d test -c product --type csv --headerline test/product.csv 2020-09-11T11:07:49.788+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T11:07:51.051+0800 11 document(s) imported successfully. 0 document(s) failed to import.

【示例】导入部分字段并指定更新键(--upsertFields name,price表示按 name、price 两字段判断是否更新):

$ mongoimport -h 127.0.0.1 --port 27017 -d test -c product --type json --upsertFields name,price test/product.json 2020-09-11T11:14:05.410+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T11:14:05.612+0800 11 document(s) imported successfully. 0 document(s) failed to import.

导出操作(mongoexport)

语法格式:

mongoexport -h <IP> --port <端口> -u <用户名> -p <密码> -d <数据库> -c <表名> -f <字段> -q <条件导出> --csv -o <文件名>

参数说明:

  • -f:导出指定字段,以逗号分隔,例如-f name,email,age导出 name、email、age 三个字段;
  • -q:按查询条件导出,例如-q '{ "uid" : "100" }'只导出 uid 为 100 的数据;
  • --csv:导出为 CSV 格式。该格式通用性较强,大部分关系型数据库都支持 CSV,便于异构系统间迁移数据。

【示例】导出整张表:

$ mongoexport -h 127.0.0.1 --port 27017 -d test -c product -o test/product.dat 2020-09-11T10:44:23.161+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T10:44:23.177+0800 exported 11 records

【示例】导出表到 JSON 文件:

$ mongoexport -h 127.0.0.1 --port 27017 -d test -c product --type json -o test/product.json 2020-09-11T10:49:52.735+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T10:49:52.750+0800 exported 11 records

【示例】导出表中部分字段到 CSV 文件:

$ mongoexport -h 127.0.0.1 --port 27017 -d test -c product --type csv -f name,price -o test/product.csv 2020-09-11T10:47:33.160+0800 connected to: mongodb://127.0.0.1:27017/ 2020-09-11T10:47:33.176+0800 exported 11 records

用仓库自带的 JSON 数据文件实战演练

本仓库的 javadb/mongodb 模块 恰好提供了与上文示例对应的三份真实数据文件,可以直接用于演练导入导出:

  • books.json:约 400 余本书籍数据(与上文book集合示例对应),每条记录包含title、isbn、pageCount、authors、status等字段;
  • students.json:3600 行学生成绩数据(与上文student集合示例对应),包含name与嵌套数组scores;
  • products.json:204 行商品数据(与上文product集合示例对应),包含_id、name、brand、price、rating等字段。

以students.json为例,启动 MongoDB 后直接执行:

mongoimport -h 127.0.0.1 --port 27017 -d test -c student --drop codes/javadb/mongodb/src/main/resources/db/students.json

即可在test.student集合中看到完整的学生成绩数据(每条文档含scores数组,正好可以体验 MongoDB 文档嵌套结构的导入效果)。

值得一提的是,仓库的集成测试 SpringBooksIntegrationTests.java 展示了另一种数据装载方式:通过 Spring Data 的MongoOperations,用ClassPathResource("books.json")读取文件,Document.parse解析后operations.insert(books, "books")批量写入books集合——这正是mongoimport导入流程在 Java 应用层的等价实现,可作为自动化灌数场景的参考。

参考资料

  • 本文关联文档:MongoDB 运维
  • MongoDB 系列教程索引(含应用指南、CRUD、聚合、事务、建模、索引、复制、分片等):MongoDB 教程
  • 仓库 MongoDB Spring Boot 示例模块:codes/javadb/mongodb,连接配置见 application.properties
  • 官方文档、GitHub 仓库与免费课程等外部资料入口,可参考 MongoDB 教程目录 中的“资料”清单
  • 文档
  • 教程
  • 数据库

【免费下载链接】db-tutorial

📚 后端程序员应该掌握的主流数据库知识

项目地址:https://gitcode.com/gh_mirrors/db/db-tutorial
点击查看免费下载

相关推荐

上一篇:终极指南:快速上手Streamlabs Desktop免费开源直播软件
下一篇:TileLang矩阵乘法优化:从基础GEMM到SplitK实现

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 1:57:06

Psalm UnusedVariable 死代码检测指南:原理、抑制与自动清理

开发工具代码质量质量保障 【免费下载链接】psalm A PHP static analysis tool for finding errors and security vulnerabilities in PHP applications 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ps/psalm 点击查看 免费下载 Psalm 是 PHP 生态中基于类型推断的静…

作者头像 李华
网站建设 2026/10/13 1:54:37

Jetson Nano MIPI CSI摄像头全栈调试指南:从设备树到Argus API

1. 为什么非得用板载MIPI CSI接口——从“能跑通”到“真可用”的分水岭Jetson Nano上接摄像头&#xff0c;新手第一反应往往是USB免驱即插即用&#xff1a;插上一个罗技C920&#xff0c;cv2.VideoCapture(0)一调&#xff0c;画面就出来了。看起来很美&#xff0c;但只要项目往…

作者头像 李华
网站建设 2026/10/13 1:54:20

从零到第一个网页跑通:Scrapling 网页抓取环境配置指南

从零到第一个网页跑通&#xff1a;Scrapling 网页抓取环境配置指南 【免费下载链接】Scrapling &#x1f577;️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Dont be shy, join here: https://discord.gg/EMgG…

作者头像 李华
网站建设 2026/10/13 1:52:16

在 ASUS 主板上让 FanControl 拿回 CPU 风扇控制权,四步搞定

在 ASUS 主板上让 FanControl 拿回 CPU 风扇控制权&#xff0c;四步搞定 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…

作者头像 李华
网站建设 2026/10/13 1:51:05

koa2-note 实战:使用 koa-static 中间件为 Koa2 应用托管静态资源

文档教程后端 【免费下载链接】koa2-note 《Koa2进阶学习笔记》已完结&#x1f384;&#x1f384;&#x1f384; 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ko/koa2-note 点击查看 免费下载 本文基于《Koa2进阶学习笔记》开源仓库中的 note/static/middleware.md …

作者头像 李华