Mongo Shell是MongoDB数据库自带的数据库管理工具,您可以在本地或ECS上安装Mongo Shell工具,然后通过Mongo Shell连接MongoDB分片集群实例。
前提条件
为保障鉴权成功,请安装与MongoDB实例版本相对应的Mongo Shell版本,下载链接和安装方法,请参见MongoDB Shell Download和The mongo Shell。
已将客户端的IP地址加入到MongoDB实例的白名单。
说明如需通过公网连接MongoDB实例,需要申请公网连接地址。
操作步骤
访问MongoDB分片集群实例列表,在上方选择资源组和地域,然后单击目标实例ID。
在目标实例页面的左侧导航栏,单击数据库连接。
查看并获取连接地址。
确定地址类型。
私网连接
专有网络是一种隔离的网络环境,安全性和性能均高于传统的经典网络。 云数据库MongoDB实例默认提供专有网络连接地址,通过专有网络连接云数据库MongoDB实例可以获取更高的安全性和性能。
公网连接
由于通过公网连接实例存在一定的安全风险,云数据库MongoDB实例默认未提供公网连接地址。如果您需要通过公网连接云数据库MongoDB实例,可以申请公网连接地址。
获取连接地址。
ConnectionStringURI SRV
ConnectionStringURI SRV:实例的高可用地址,可以执行数据库的读写操作。建议生产环境的应用程序通过该地址连接实例,当分片集群实例增删mongos节点时,使用SRV地址可以无感与实例交互,简化了应用程序的设计和维护。
重要默认情况下控制台不显示SRV地址,如需使用请单击数据库连接页面的申请私网SRV地址或申请公网SRV地址。
申请公网SRV地址前,您需要先开通Mongos节点的公网地址。通过公网SRV地址连接MongoDB实例后,客户端会自动将请求发送到已开通公网地址的Mongos节点上。
SRV地址仅支持云盘版实例。
专有网络的私网SRV地址最多关联20个Mongos节点,因专有网络内DNS解析协议的限制,在超出20个Mongos节点的情况下,超出的节点将不能分担请求负载。公网SRV地址不受此限制。
推荐生产环境的应用程序通过ConnectionStringURI SRV地址连接数据库,客户端自动将请求发送到实例的多个节点上,实现负载均衡。当某个节点出现故障时,客户端能自动进行故障切换,将请求发送到状态正常的节点上。当增删节点时,可以无感与集群交互,简化了应用程序的设计和维护。
低版本Driver不支持SRV地址或不支持自动发现节点,例如:
pymongo低于3.9.0版本。
mongo-java-driver低于3.10.0版本。
mongodb-go-driver低于1.1.0版本。
mongodb node.js低于3.3.0版本。
mongo-cxx-driver低于3.8 版本。
格式:
mongodb+srv://<username>:<password>@<srv-host>/<database>?[authSource=<authenticationDatabase>]<other_options>
参数说明:
参数
说明
mongodb+srv://
连接字符串的前缀,表示使用DNS SRV记录进行服务发现。
<username>
数据库账号的名称,默认为root。
<password>
数据库账号的密码。
<srv-host>
主机名。
<database>
要访问的数据库名称,默认为admin。
authSource=<authenticationDatabase>
(可选)该参数用于指定数据库账号所属的数据库。
<authenticationDatabase>
为鉴权数据库名称。说明云数据库MongoDB的SRV连接串的TXT记录指明了
authSource=admin
,会覆盖<database>
的鉴权属性。因此,当您需要修改鉴权数据库时,需要手动指明authSource=<authenticationDatabase>
,而非修改<database>
参数。更多介绍,请参见MongoDB官网文档。<other_options>
其他可选参数。
说明SVR连接的SSL选项默认值为true,如果您不需要使用SSL加密连接,需要在连接串上添加参数
ssl=false
。更多可选参数的介绍,请参见MongoDB官网文档。示例:
数据库账号为test,所属数据库为admin。
mongodb+srv://test:****@dds-2zef4c23****-srv.mongodb.pre.nosql.aliyuncs.com/admin?ssl=false
ConnectionStringURI
ConnectionStringURI:实例的高可用地址,可以执行数据库的读写操作。低版本Driver不支持SRV地址或不支持自动发现节点时,可使用该地址连接数据库。
云数据库 MongoDB 版提供了Mongos组件和Shard组件的ConnectionStringURI地址。客户端自动将请求发送到对应组件的多个节点上,实现负载均衡。当组件内的某个节点出现故障时,客户端能自动进行故障切换,将请求发送到状态正常的节点上。
说明默认情况下,控制台仅会展示Mongos的ConnectionStringURI地址,Shard的ConnectionStringURI地址需要申请对应节点的连接地址。
未设置readPreference和readPreferenceTags参数时,会将读请求发送到主节点。
当分片集群实例增删mongos节点后,需要修改该连接串,增删对应的节点连接信息。
Mongos组件和Shard组件的ConnectionStringURI地址的说明分别如下:
Mongos
重要推荐生产环境的应用程序通过ConnectionStringURI连接数据库,客户端自动将请求发送到Mongos组件的多个节点上,实现负载均衡。Mongos组件的某个节点出现故障时,客户端能自动进行故障切换,将请求发送到状态正常的Mongos节点上。
格式:
mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>[?&authSource=<authenticationDatabase>]
参数
说明
<username>
数据库账号的名称,默认为root。
<password>
数据库账号的密码。
<host>
Mongos组件中节点的域名信息。
<port>
Mongos组件中节点的端口。
<database>
要访问的数据库名称,默认为admin。
authSource=<authenticationDatabase>
(可选)该参数用于指定数据库账号所属的数据库。
<authenticationDatabase>
为鉴权数据库名称。如果不配置该参数,<database>
会作为鉴权数据库。示例:
数据库账号为test,所属数据库为admin。
mongodb://test:****@s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717,s-bp1773180e38****.mongodb.rds.aliyuncs.com:3717/admin
Shard
Shard组件的ConnectionStringURI地址为高可用地址,实现负载均衡及高可用,连接该地址可以执行数据库的读写操作。该地址包含Shard组件中所有节点的地址,建议生产环境的应用程序通过该地址连接实例。
重要生产环境的应用程序建议通过ConnectionStringURI地址连接实例,可以确保连接的节点始终为主节点,不会因为主备切换而影响应用的读写操作。
格式:
mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]
参数说明:
参数
说明
<username>
数据库账号的名称,默认为root。
<password>
数据库账号的密码。
<host>
主节点、从节点和只读节点的域名信息。
<port>
主节点、从节点和只读节点的端口。
<database>
要访问的数据库名称,默认为admin。
replicaSet=<replicaSet_value>
该参数可以将读请求发送到副本集实例的所有节点。
<replicaSet_value>
为实例高可用连接地址的唯一标识ID。authSource=<authenticationDatabase>
(可选)该参数用于指定数据库账号所属的数据库。
<authenticationDatabase>
为鉴权数据库名称。如果不配置该参数,<database>
会作为鉴权数据库。readPreference=[primary | primaryPreferred | secondary | secondaryPreferred]
(可选)该参数可以实现读写分离和负载均衡,能够将写请求发送到主节点,将读请求发送到参数指定节点,取值说明如下:
readPreference=primary
:读请求仅发送到主节点。readPreference=primaryPreferred
:读请求优先发送到主节点。如果主节点故障,将读请求发送到从节点和只读节点。readPreference=secondary
:读请求仅发送到从节点和只读节点。如果从节点和只读节点都出现故障,读请求失败,不会发送到主节点。readPreference=secondaryPreferred
:读请求优先发送到从节点和只读节点。如果从节点和只读节点都出现故障,该参数将读请求发送到主节点。
说明当读请求发送到从节点和只读节点时,可能会出现负载不均的情况,如果需要进一步指定节点,请设置参数readPreferenceTags。
readPreferenceTags=<readonly_Tags>
(可选)该参数可以将读请求优先发送到标签对应的节点。通常与参数readPreference一起使用,与
primary
模式不兼容。<readonly_Tags>
为只读节点的标签键值对列表,支持的类型如下:readPreferenceTags=role:electable
:优先读从节点。说明该选项仅对云盘版实例生效。
readPreferenceTags=role:readonly
:优先读只读节点。
MongoDB实例可以灵活使用
readPreference
和readPreferenceTags
参数,通过不同标签的组合,实现不同的场景需求:读请求主节点响应策略
读请求发送的节点
参数组合方案
读请求失败情况下,读请求发送到主节点
优先读主节点
readPreference=primaryPreferred
优先读从节点和只读节点
readPreference=secondaryPreferred
优先读从节点
说明如果从节点故障,读请求发送到主节点。
readPreference=secondaryPreferred&readPreferenceTags=role:electable
优先读只读节点
说明如果只读节点故障,读请求发送到主节点。
readPreference=secondaryPreferred&readPreferenceTags=role:readonly
读请求失败情况下,读请求不发送到主节点
仅读从节点和只读节点
readPreference=secondary
仅读从节点
说明如果从节点故障,读取操作失败。
readPreference=secondary&readPreferenceTags=role:electable
仅读只读节点
说明如果只读节点故障,读取操作失败。
readPreference=secondary&readPreferenceTags=role:readonly
示例:
mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****
Mongos地址
Mongos组件的连接地址,包括主节点(Primary)的连接地址。
说明日常测试时,仅需连接Mongos组件的任意节点。
格式:
<host>:<port>
参数说明:
参数
说明
<host>
Mongos组件中节点的域名信息。
<port>
Mongos组件中节点的端口。
示例:
s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717
Shard地址
Shard组件的连接地址,包括主节点(Primary)、从节点(Secondary)和只读节点(ReadOnly)的连接地址。
说明默认情况下,控制台仅会展示Mongos的连接地址,Shard和ConfigServer的连接地址需要申请对应节点连接地址。
只有Shard组件中存在只读节点时,您才能看到Shard组件的只读节点连接地址。
格式:
<host>:<port>
参数说明:
参数
说明
<host>
Shard组件中节点的域名信息。
<port>
Shard组件中节点的端口。
示例:
s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717
ConfigServer地址
ConfigServer组件的连接地址,包括主节点(Primary)和从节点(Secondary)的连接地址。
说明默认情况下,控制台仅会展示Mongos的连接地址,Shard和ConfigServer的连接地址需要申请对应节点连接地址。
仅本地盘版分片集群实例支持申请ConfigServer的连接地址。
ConfigServer地址
格式:
<host>:<port>
参数说明:
参数
说明
<host>
ConfigServer组件中节点的域名信息。
<port>
ConfigServer组件中节点的端口。
示例:
s-bp1c010266f6****.mongodb.rds.aliyuncs.com:3717
根据业务需要,在安装有Mongo Shell工具的客户端(本地服务器或ECS服务器)上连接云数据库MongoDB分片集群实例。
通过高可用地址连接
语法:
mongo "<连接地址>"
参数说明:
<连接地址>
为实例的ConnectionStringURI SRV或ConnectionStringURI高可用地址。您需要替换高可用地址中的****
为数据库账号的密码。示例:
连接地址为实例的ConnectionStringURI地址,数据库账号为test,所属数据库为admin。
mongo "mongodb://test:****@s-bp1d7b6277cd****.mongodb.rds.aliyuncs.com:3717,s-bp129f75f1d6****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****"
通过单节点地址连接
执行连接命令。
语法:
mongo --host <host> --port <port> -u <username> -p --authenticationDatabase <authenticationDatabase>
参数说明:
<host>
:节点的域名信息。<port>
:节点的端口。<username>
:数据库账号的名称,默认为root。重要不建议在生产环境中直接使用root账号连接数据库。您可以创建数据库账号并分配权限。
<authenticationDatabase>
:鉴权数据库名称,用于指定数据库账号所属的数据库。当数据库账号为root时,对应的数据库为admin。如果您希望指定其他数据库,请先在该数据库中使用db.createUser()命令创建账号,然后再使用该账号进行连接。重要数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。
示例:
数据库账号为test,所属数据库为admin。
mongo --host s-bp1ea17b41abecf43****.mongodb.rds.aliyuncs.com --port 3717 -u test -p --authenticationDatabase admin
在命令行提示
Enter password:
时,输入数据库账号对应的密码并按回车键确认。说明输入密码时,密码字符是不可见的。