Mongo Shell是MongoDB自带的数据库管理工具,您可以下载Mongo Shell工具并安装至客户端(本地服务器或ECS服务器),用于连接云数据库MongoDB副本集实例。
前提条件
已创建云数据库MongoDB副本集实例,创建方法请参见创建副本集实例。背景信息
云数据库MongoDB副本集实例提供的默认数据库admin,存储了实例的所有数据库账号和角色信息,建议使用admin之外的数据库实现业务需求(即不对admin库进行任何操作)。准备工作
- 下载并安装与云数据库MongoDB实例数据库版本相同的Mongo Shell工具至客户端(本地服务器或云服务器ECS实例),下载链接和安装方法,请参见MongoDB Shell Download和The mongo Shell。如果应用部署在ECS实例,您需要确保云数据库MongoDB实例和ECS实例满足以下条件,以保证网络的连通性。ECS实例信息的查看方法请参见查看实例信息。
- 所在地域相同。
- 网络类型相同。说明
- 同一可用区会减少网络延时,建议所在可用区相同。
- 专有网络具有更高的安全性,建议使用专有网络。
- 如果网络类型为专有网络,需确保使用相同的专有网络ID。
- 如果您需要使用专有网络,但ECS实例的网络类型为经典网络,您可以将ECS实例网络类型转换为专有网络,具体请参见ECS实例从经典网络迁移到专有网络。
- 将客户端IP地址添加至云数据库MongoDB实例的白名单中,添加方法请参见设置白名单。
- 如果您需要使用公网地址连接云数据库MongoDB实例,可以手动申请公网地址,申请方法请参见(可选)申请公网连接地址。
- 如果需要连接只读节点,请确保云数据库MongoDB实例中已存在只读节点,如果没有,您可以添加只读节点,添加方法请参见变更副本集实例配置。
操作步骤
- 登录MongoDB管理控制台。
- 在左侧导航栏,单击副本集实例列表。
- 在页面左上角,选择实例所在的资源组和地域。
- 单击目标实例ID或目标实例所在行操作列的管理。
- 在目标实例页面的左侧导航栏,单击数据库连接。
- 查看并获取云数据库MongoDB副本集实例的连接地址。
项目 说明 地址类型 - 私网连接:
- 专有网络:专有网络是一种隔离的网络环境,安全性和性能均高于传统的经典网络。 云数据库MongoDB实例默认提供专有网络连接地址,通过专有网络连接云数据库MongoDB实例可以获取更高的安全性和性能。
- 经典网络:云服务在网络上不进行隔离,仅依靠云服务自身的安全组或白名单策略阻挡非法访问。
- 公网连接:由于通过公网连接实例存在一定的安全风险,云数据库MongoDB实例默认未提供公网连接地址。如果您需要通过公网连接云数据库MongoDB实例,可以手动申请公网连接地址,申请方法请参见(可选)申请公网连接地址。
角色 - Primary:主节点,连接主节点地址可以执行数据库的读写操作。重要 不建议在生产环境的应用程序通过该地址连接实例,当主节点出现故障时,会发生主备切换,主节点地址会发生变化,您需要连接新的主节点确保读写操作不受影响。
- Secondary:从节点,连接从节点地址仅能执行数据库的读操作。
- Readonly:只读节点,连接只读节点地址仅能执行数据库的读操作。说明 只有实例中已存在只读节点时,您才可以看到只读节点的地址。
- ReadOnly ConnectionStringURI:实例的高可用地址,实现负载均衡及高可用,连接高可用地址可以执行数据库的读写操作。该地址只包含实例所有只读节点的地址,在具有多个只读节点的情况下,建议读操作多的应用程序通过该地址连接实例。说明
- 只有实例中已存在只读节点时,您才可以看到ReadOnly ConnectionStringURI地址。
- 通过ReadOnly ConnectionStringURI地址连接实例,会优先将读请求发送到只读节点。
- 当实例中的某个只读节点出现故障时,读请求会自动切换到下一个只读节点,不会影响应用的读操作。如果所有的只读节点都出现了故障,读请求会切换到从节点。
- ConnectionStringURI:实例的高可用地址,实现负载均衡及高可用,连接高可用地址可以执行数据库的读写操作。该地址包含实例所有节点的地址,建议生产环境的应用程序通过该地址连接实例。重要 生产环境的应用程序建议通过ConnectionStringURI地址连接实例,可以确保连接的节点始终为主节点,不会因为主备切换而影响应用的读写操作。
Primary、Secondary和Readonly节点地址 格式: <host>:<port>
参数说明:<host>
:主节点、从节点或只读节点的域名信息。<port>
:主节点、从节点或只读节点的端口。
示例:dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717
ReadOnly ConnectionstringURI地址 格式: mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?readPreference=[secondary | secondaryPreferred][&readPreferenceTags=<readonly_Tags>]&replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]
参数说明:<username>
:数据库账号的名称,默认为root。<password>
:数据库账号的密码。<host>
:只读节点的域名信息。<port>
:只读节点的端口。<database>
:要访问的数据库名称,默认为admin。readPreference=[secondary | secondaryPreferred]
:实现读写分离。重要- Mongo Shell不支持
readPreference=[secondary | secondaryPreferred]
参数,读请求会发送到主节点。 - 通过Mongo Shell连接实例时,您可以使用
cursor.readPref()
或Mongo.setReadPref()
实现读写分离,更多信息,请参见cursor.readPref()或Mongo.setReadPref()。
- Mongo Shell不支持
readPreferenceTags=<readonly_Tags>
(可选):将读请求优先发送到标签对应的只读节点。重要- Mongo Shell不支持
readPreferenceTags=<readonly_Tags>
参数,读请求会发送到主节点。 - 通过Mongo Shell连接实例时,您可以使用
cursor.readPref()
或Mongo.setReadPref()
将读请求发送到标签对应的只读节点,更多信息,请参见cursor.readPref()或Mongo.setReadPref()。
- Mongo Shell不支持
replicaSet=<replicaSet_value>
:将读请求发送到副本集实例的所有节点。<replicaSet_value>
为实例高可用连接地址的唯一标识ID。authSource=<authenticationDatabase>
(可选):指定数据库账号所属的数据库。<authenticationDatabase>
为鉴权数据库名称。如果不配置该参数,<database>
会作为鉴权数据库。重要 数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。
示例:
数据库账号为test,所属数据库为admin。mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?readPreference=secondary&readPreferenceTags=role:readonly&replicaSet=mgset-6108****
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>
会作为鉴权数据库。重要 数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。
示例:
数据库账号为test,所属数据库为admin。mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****
- 私网连接:
- 根据业务需要,在安装有Mongo Shell工具的客户端(本地服务器或ECS服务器)上连接云数据库MongoDB副本集实例。
- 通过高可用地址连接实例
通过高可用地址连接实例,可以连接实例的所有节点。在单个节点发生故障时,仍然能正常连接实例。
语法:mongo "<连接地址>"
参数说明:<连接地址>
为实例的ReadOnly ConnectionStringURI地址或ConnectionStringURI地址。重要- 您需要替换ReadOnly ConnectionStringURI地址或ConnectionStringURI地址中的
****
为数据库账号的密码。 - Mongo Shell不支持ReadOnly ConnectionStringURI连接地址中的
readPreference
和readPreferenceTags
参数,故使用该地址连接实例时,会将读请求发送到主节点。
示例:
连接地址为实例的ConnectionStringURI地址,数据库账号为test,所属数据库为admin。mongo "mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****"
- 您需要替换ReadOnly ConnectionStringURI地址或ConnectionStringURI地址中的
- 通过单节点地址连接实例
通过单节点地址连接实例,只能连接实例的单个节点。在单个节点发生故障时,将无法连接实例。
- 执行连接命令。语法:
mongo --host <host> --port <port> -u <username> -p --authenticationDatabase <authenticationDatabase>
参数说明:<host>
:主节点、从节点或只读节点的域名信息。<port>
:主节点、从节点或只读节点的端口。<username>
:数据库账号的名称,默认为root。说明 不建议直接使用root账号连接数据库。您可以创建数据库账号并分配权限,详情请参见MongoDB数据库账号权限管理。<authenticationDatabase>
:鉴权数据库名称,用于指定数据库账号所属的数据库。当数据库账号为root时,对应的数据库为admin。如果您希望指定其他数据库,请先在该数据库中使用db.createUser()命令创建账号,然后再使用该账号进行连接。重要 数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。
示例:
数据库账号为test,所属数据库为admin。mongo --host dds-bp19f409d7512****.mongodb.rds.aliyuncs.com --port 3717 -u test -p --authenticationDatabase admin
- 输入数据库账号的密码。
在命令行提示
Enter password:
时,输入数据库账号的密码并按回车键确认。
- 执行连接命令。
- 通过高可用地址连接实例
常见的连接场景
- 如何通过公网连接MongoDB实例说明 通过公网地址连接实例时,建议使用SSL加密连接,详情请参见使用Mongo Shell通过SSL加密连接数据库。
- 不同网络类型的ECS实例与MongoDB实例如何连接
- ECS实例与MongoDB实例地域不同时如何连接
- ECS实例与MongoDB实例不在同一阿里云账号时如何连接