mongo,mongod,mongos指令
在 MongoDB 中,mongo
、mongod
、mongos
是三个核心指令,分别对应不同的功能:
mongod:是 MongoDB 的数据库服务器进程,负责管理数据存储、处理客户端请求(如查询、插入等),是数据库的核心服务。启动
mongod
后,MongoDB 才真正开始运行并提供数据服务。mongo:是 MongoDB 的交互式命令行客户端工具,用于连接到
mongod
或mongos
进程,执行数据库操作(如创建集合、查询数据、管理用户等),类似 MySQL 的mysql
客户端。mongos:是 MongoDB 分片集群中的路由进程,用于协调分片集群的请求,将客户端操作分发到对应的分片服务器,同时聚合结果返回给客户端。只有在使用分片集群时才需要启动
mongos
。
简单来说,mongod
是数据库服务本身,mongo
是操作数据库的客户端,mongos
是分片集群的路由工具。
一、mongod
mongod
是 MongoDB 数据库的核心服务进程,负责管理数据存储、处理客户端请求(查询、插入、更新等),是运行 MongoDB 数据库的核心程序。以下是其详细用法解析:
1、基本语法
启动 MongoDB 服务的基本格式:
mongod [选项]
默认情况下,mongod
会使用默认配置(如端口 27017
、数据目录 /data/db
等),但可通过选项自定义配置。
2、核心配置选项
①. 数据存储相关
--dbpath <路径>
指定数据文件的存储目录(必须手动创建,默认是/data/db
或C:\data\db
)。
示例:mongod --dbpath /var/lib/mongodb
--logpath <路径>
指定日志文件路径(而非输出到控制台),需确保目录存在。
示例:mongod --logpath /var/log/mongodb/mongod.log
--logappend
日志以追加方式写入(默认覆盖旧日志),通常与--logpath
配合使用。
②. 网络与连接相关
--port <端口号>
指定服务监听的端口(默认27017
),常用于多实例部署。
示例:mongod --port 27018
--bind_ip <IP地址>
指定允许连接的 IP 地址(默认只允许localhost
连接)。
示例:mongod --bind_ip 0.0.0.0
(允许所有 IP 连接,生产环境需谨慎)--auth
启用身份验证(连接时需提供用户名和密码),需先创建用户才能登录。
③. 服务运行相关
--fork
以守护进程(后台)模式运行(仅 Linux/macOS 支持)。
示例:mongod --fork --logpath /var/log/mongodb/mongod.log
(需配合日志路径)--config <配置文件路径>
通过配置文件加载参数(推荐生产环境使用,避免命令行参数过长)。
示例:mongod --config /etc/mongod.conf
--version
查看mongod
版本信息。--help
查看所有可用选项的详细说明。
3、配置文件示例
生产环境中,通常通过配置文件管理 mongod
参数(以 mongod.conf
为例):
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/var/lib/mongodb"
net:port: 27017bindIp: 127.0.0.1
processManagement:fork: true
security:authorization: enabled # 等效于 --auth
启动时加载配置:mongod --config /etc/mongod.conf
4、启动与停止
- 启动服务:直接执行
mongod
或带参数的命令。 - 停止服务:
- 交互式启动时,按
Ctrl + C
终止。 - 后台模式(
--fork
)时,使用mongosh
连接后执行db.shutdownServer()
,或通过进程 ID 终止:kill <pid>
(不推荐kill -9
,可能损坏数据)。
- 交互式启动时,按
5、注意事项
(1)首次启动前需手动创建数据目录(如 mkdir -p /data/db
),否则会启动失败。
(2)生产环境必须启用身份验证(--auth
)并限制 bindIp
,避免未授权访问。
(3)日志和数据目录需确保 mongod
进程有读写权限。
(4)不同版本的 mongod
可能有选项差异,建议结合对应版本的官方文档。
总之,mongod
是 MongoDB 的 “发动机”,所有数据库操作都依赖它的运行,配置时需根据实际需求合理设置参数。
二、mongo
mongo
是 MongoDB 的交互式命令行客户端工具,用于连接数据库服务(mongod
或 mongos
)并执行各种操作。以下是其核心用法和常见功能详解:
1、基本语法
启动 mongo
客户端并连接数据库的基本格式:
mongo [连接选项] [数据库名称]
- 若不指定选项,默认连接本地
mongod
(地址localhost:27017
),并进入test
数据库。
2、常用连接选项
指定地址和端口:
连接远程或非默认端口的mongod
/mongos
:mongo --host 192.168.1.100 --port 27018 # 连接指定主机和端口 mongo mongodb://192.168.1.100:27018 # 用 URI 格式连接(等效)
认证登录:
连接需要权限验证的数据库时,指定用户名和密码:mongo --username 用户名 --password 密码 --authenticationDatabase 认证数据库名称
(注:
认证数据库
通常是用户创建时所在的库,如admin
)指定数据库:
连接指定的数据库:mongo admin --port 4000 mongo:启动 MongoDB 的命令行客户端工具。 admin:指定连接后默认进入的数据库名称(这里是 admin 数据库,常用于存储管理员用户信息)。 --port 4000:指定连接的 MongoDB 服务端口为 4000(默认端口是 27017,这里用非默认端口连接)。 整体作用:连接本地(默认主机 localhost)端口为 4000 的 MongoDB 服务,并自动切换到 admin 数据库。
其他常用选项:
--quiet
:减少冗余输出,只显示关键信息。--eval "命令"
:直接执行指定命令(非交互式),例如:bash
mongo --eval "db.users.find().limit(1)" # 执行查询并退出
3、进入客户端后的核心操作
连接成功后,进入交互式环境,可执行 MongoDB shell 命令:
数据库操作:
- 切换 / 创建数据库:
use 数据库名
(若不存在,插入数据时自动创建)。 - 查看当前数据库:
db
。 - 查看所有数据库:
show dbs
。 - 删除当前数据库:
db.dropDatabase()
。
- 切换 / 创建数据库:
集合(表)操作:
- 创建集合:
db.createCollection("集合名")
(可选,插入数据时会自动创建)。 - 查看当前库的集合:
show collections
。 - 删除集合:
db.集合名.drop()
。
- 创建集合:
数据操作:
- 插入:
db.集合名.insertOne({key: value})
(单条)、insertMany([...])
(多条)。 - 查询:
db.集合名.find(条件)
(返回所有符合条件的文档)、findOne(条件)
(返回第一条)。 - 更新:
db.集合名.updateOne(条件, { $set: {字段: 新值} })
(单条)、updateMany()
(多条)。 - 删除:
db.集合名.deleteOne(条件)
(单条)、deleteMany(条件)
(多条)。
- 插入:
其他常用命令:
- 查看帮助:
help
(全局帮助)、db.集合名.help()
(集合相关命令帮助)。 - 退出客户端:
exit
或Ctrl + C
。
- 查看帮助:
4、特点与注意事项
- 交互式:支持命令补全(按 Tab 键)、历史命令(上下箭头),适合调试和手动操作。
- 脚本执行:可执行
.js
脚本文件,例如mongo script.js
(脚本中可包含批量操作逻辑)。 - 版本兼容:
mongo
客户端版本需与mongod
服务版本兼容,否则可能出现命令不支持的问题。
简单来说,mongo
是操作 MongoDB 的 “控制台”,通过它可以直观地管理数据库、集合和数据。
三、mongos
mongos
是 MongoDB 分片集群(Sharded Cluster)中的路由进程,主要负责协调客户端请求在分片集群中的分发与结果聚合,是分片集群的核心组件之一。以下是其详细解析:
1、基本作用
在分片集群中,数据被分散存储在多个 分片(shard) 上,而 mongos
相当于 “路由中枢”:
- 接收客户端(如
mongo
)的请求 - 根据分片键(sharding key)规则,将请求路由到对应的分片
- 收集各分片的返回结果,聚合后返回给客户端
- 维护集群元数据(存储在配置服务器
config server
中)的缓存
2、基本语法
启动 mongos
进程的基本格式:
mongos [选项]
mongos
本身不存储数据,启动时必须指定配置服务器的地址(分片集群的元数据存储处)。
3、核心配置选项
①. 配置服务器相关(必需)
--configdb <配置服务器列表>
指定分片集群中配置服务器的地址(必选参数)。
配置服务器通常以副本集形式部署,格式为:副本集名称/IP1:端口1,IP2:端口2,...
示例:mongos --configdb cfgReplSet/192.168.1.10:27019,192.168.1.11:27019
②. 网络与连接相关
--port <端口号>
指定mongos
监听的端口(默认27017
,建议与分片节点端口区分)。
示例:mongos --port 27018 --configdb ...
--bind_ip <IP地址>
指定允许连接的 IP 地址(默认仅localhost
)。
示例:mongos --bind_ip 0.0.0.0 --configdb ...
(允许所有 IP 连接)--auth
启用身份验证(与分片集群的权限系统联动,需在配置服务器中预先创建管理员用户)。
③. 其他常用选项
--logpath <路径>
指定日志文件路径(避免日志输出到控制台)。
示例:mongos --logpath /var/log/mongodb/mongos.log --configdb ...
--logappend
日志以追加方式写入(默认覆盖旧日志)。--fork
以守护进程(后台)模式运行(仅 Linux/macOS 支持)。--config <配置文件路径>
通过配置文件加载参数(推荐生产环境使用)。
4、配置文件示例
生产环境中,mongos
通常通过配置文件启动(如 mongos.conf
):
systemLog:destination: filepath: "/var/log/mongodb/mongos.log"logAppend: true
net:port: 27017bindIp: 192.168.1.5 # 仅允许集群内部IP连接
sharding:configDB: cfgReplSet/192.168.1.10:27019,192.168.1.11:27019 # 配置服务器副本集
processManagement:fork: true
security:authorization: enabled # 启用身份验证
启动命令:mongos --config /etc/mongos.conf
5、使用场景与注意事项
(1)仅用于分片集群:
mongos
是分片集群的专属组件,单节点或副本集环境不需要启动 mongos
。
(2)多实例部署:
为提高可用性,通常部署多个 mongos
进程(配合负载均衡),避免单点故障。
(3)与配置服务器的依赖:
mongos
启动时必须能连接配置服务器,否则无法正常工作;配置服务器的拓扑变更后,需重启 mongos
以更新元数据缓存。
(4)客户端连接方式:
客户端(如 mongo
)需连接 mongos
而非直接连接分片节点,所有操作通过 mongos
路由。
6、启动与停止
- 启动:执行
mongos
命令并指定配置服务器等参数(或通过配置文件)。 - 停止:
- 交互式启动时,按
Ctrl + C
终止。 - 后台模式时,通过
mongo
连接mongos
后执行db.shutdownServer()
,或使用kill <pid>
(不推荐强制终止)。
- 交互式启动时,按
总结:mongos
是 MongoDB 分片集群的 “交通指挥官”,负责请求路由和结果聚合,是实现大规模数据分片存储的核心组件。