数据库代理常见问题

如果您在使用RDS MySQL数据库代理过程中存在疑问或遇到问题,可以参考本文查看解决方案。

目录

什么是数据库代理?

数据库代理是位于数据库服务端和应用服务端之间的网络代理服务,用于转发应用服务端访问数据库时的所有请求,提供自动读写分离、事务拆分、连接池、连接保持等高级功能,具有高可用、高性能、可运维、简单易用等特点。

通用型代理和独享型代理有什么区别?

  • 通用型共享CPU物理资源,代理规格最高为16核(代理个数8),不收取任何费用,更经济。

  • 独享型独占CPU物理资源,代理规格最高为64核(代理个数32),按量计费,具有更好的性能稳定性。

更多信息,请参见通用型代理和独享型代理代理个数和代理规格的关系数据库代理费用说明

数据库代理是否占用主实例的QPS或者TPS?

不会。

数据库代理地址和常规地址是否是一个地址?

不是。

  • 常规地址:正常的业务读写地址,通过该地址发送的所有请求只会路由到该实例。

  • 数据库代理地址:可根据用户的SQL请求,自动判断读请求或写请求,并分发到主实例或只读实例,实现读写分离,减轻主实例的压力。

开通数据库代理后,实例原来的地址和只读实例的地址是否会被收回?

不会收回。

数据库代理的内网网络类型是否和主实例相同?

数据库代理的内网网络类型统一为专有网络。

数据库代理是什么架构?有故障切换机制吗?

数据库代理采用双主节点的高可用架构,流量连接按照1:1比例分发到两个节点当中,如果其中一个节点发生故障,将由另一个节点承担全部流量,并会自动触发故障节点重搭恢复任务,以确保数据库服务的高可用性。

数据库代理部署架构,请参见代理部署架构

代理规格与代理节点规格是什么关系?

代理规格 = 所有代理节点规格的总和。

例如,独享型双可用区(可用区A + 可用区B)部署代理,可用区A的单节点代理规格CPU为1核,节点个数为2;可用区B的单节点代理规格CPU为2核,节点个数为2,则代理规格 = 可用区A的代理规格 + 可用区B的代理规格=1核 x 2 + 2核 x 2 = 2核 + 4核 = 6核。

代理个数和代理规格是什么关系?

代理个数 = 代理规格 / 单位代理规格,其中, 单位代理规格固定为2核 CPU。

例如,代理实例的代理规格为6核 ,则代理个数 = 6核 / 2核 = 3。

代理节点规格的限制有哪些?

  • 代理单节点规格范围:通用型为1~8核,独享型为1~16核。

  • 同一可用区的代理节点规格必须相同。

  • 双可用区2节点部署时,两个节点规格必须一致。

  • 不同可用区代理节点规格可以不同。建议通用型代理不同可用区代理节点规格相同。

代理个数和代理地址个数有关系吗?

没有。

每个RDS实例在开通数据库代理后,都可以申请1~7个代理地址,每个代理地址都可以申请1个内网连接地址和外网连接地址,更多信息,请参见新增代理连接地址

数据库代理的性能会随着代理地址的增多而提升吗?

不会。

如果您的RDS MySQL实例为高可用系列,则数据库代理的性能与只读实例个数、代理个数(代理规格)相关;如果您的RDS MySQL实例为集群系列,则数据库代理的性能与备节点个数、代理个数(代理规格)相关:

  • 增加高可用系列的只读实例个数或集群系列的备节点个数,可以提升数据库代理的读请求处理能力。

  • 增加代理个数(代理规格),可以提升数据库代理的性能。

数据库代理对用户的连接数有限制吗?

数据库代理本身并没有最大连接数的限制,连接数的限制还是由数据库中计算节点的规格决定。

使用数据库代理地址连接时报超时错误怎么办?

建议您将wait_timeout参数调大后再次尝试连接。如何调整实例参数,请参见设置实例参数

数据库代理地址(读写分离地址)可以修改吗?

可以。

数据库代理地址(读写分离地址)可以修改,具体操作,请参见设置数据库代理连接地址

主实例写的频率不高,能不能让读请求也发送给主实例?

能。

设置读权重分配时,为主实例设置权重即可。如何为主实例设置权重,请参见开通数据库代理

读写分离支持hint语句吗?

您可以通过hint语句强制转发请求到主实例上执行。关于RDS读写分离支持的hint格式,请参见文档系统默认读权重分配规则中的通过hint指定SQL发往主实例或只读实例部分。

为什么修改后的读权重没有生效?

修改读权重后,新建的连接才会根据新权重进行分配,已存在的连接不会断开重连。

为什么各节点的负载不符合配置的读权重?

若各节点的负载与配置的读权重不同,主要检查如下两个方面:

  • 请求语句是否包含了事务。包含了事务的所有请求只会路由到主实例,开启设置事务拆分可以降低主实例负载。

  • 是否只用了数据库代理地址连接数据库。如果您未使用数据库代理连接地址连接数据库,而是使用了主实例地址或者只读实例地址,这些地址收到的请求不会按权重分配。

没有开通数据库代理服务,可以配置只读实例的业务分配权重吗?

没有开通数据库代理服务,无法配置只读实例的业务分配权重,但是您可以在不同的应用程序中配置不同的连接地址(只读实例或主实例连接地址),实现读写分离和负载均衡。

只读实例不可用时,新连接会连接到正常的只读实例上,那已连接到故障只读实例的连接会自动切换到正常只读实例上吗?

不会自动切换,需要等待超时后重新连接到正常只读实例上。

开通数据库代理服务后,如何验证读写分离?

读写分离的验证方法,请参见验证读写分离

购买只读实例做读写分离后,主实例的历史数据是否会自动同步到只读实例?

开通数据库代理服务并完成读写分离的相关数据配置后,主实例的历史数据会自动同步到只读实例,无需手动同步。

数据库代理中的连接池与应用程序中的连接池有什么区别,应该如何结合使用?

RDS MySQL数据库代理的连接池功能是指代理的连接池功能,不影响客户端的连接池功能。如果您的客户端已经支持连接池,则可以不使用Proxy的连接池功能。RDS MySQL数据库代理的连接池功能详情,请参见设置连接池

为什么查询时会出现乱码?

通过如下命令检查主实例和只读实例使用的字符集是否一致。

select 
@@global.character_set_results, 
@@global.character_set_client, 
@@global.character_set_connection, 
@@global.character_set_server;

如果不一致可能会出现乱码,您可以修改主实例或只读实例的字符集,确保两个实例使用的字符集一致。如何修改实例字符集,请参见RDS for MySQL字符集相关说明

DDL操作是否会自动从主库同步到从库?

所有DDL操作(创建表或库、删除表或库、变更表结构、权限等)会自动从主库同步到从库。

如何查看专有网络类型的内网代理地址的VpcId和vSwitch Id?

在实例的数据库代理页面的连接信息区域,将鼠标悬停于端口右侧的图标,如下图所示,即可查看。

image.png

迁移代理可用区会对主实例连接有影响吗?

迁移代理可用区只会影响使用数据库代理连接地址的业务连接,通过主实例连接地址、只读实例连接地址或者集群读写地址、集群只读地址、节点直连地址的业务不受影响。建议将业务切换到不受影响的连接地址中,并在业务低峰期进行可用区迁移。

迁移代理可用区的影响是什么?

迁移代理可用区时,数据库代理连接会出现约30秒的闪断。影响时长跟业务实际使用有关,建议将业务切换到不受影响的连接地址中,并在业务低峰期进行可用区迁移。具体影响,请参见迁移代理可用区

迁移代理可用区,就近访问功能会失效吗?

可能会失效。

迁移可用区后,默认可就近访问新可用区,原可用区的就近访问失效。若修改了代理连接地址的目标可用区,使其与默认可用区不一致,则对应可用区的就近访问失效。示例场景如下:

场景

原代理信息

目标代理信息

代理实例当前可用区

代理地址

就近访问

代理实例目标可用区

代理地址默认可用区

代理地址目标可用区

就近访问

场景1:

可用区A + 可用区B迁移至可用区A + 可用区C

可用区A

代理地址a

可用区A

可用区A

可用区A

可用区A

可用区A

可用区C

失效

可用区B

代理地址b

可用区B

可用区C

可用区C

可用区C

可用区C

可用区D

失效

场景2:

可用区A + 可用区B迁移至可用区C + 可用区D

可用区A

代理地址a

可用区A

可用区C

可用区C

可用区C

可用区C

可用区E

失效

可用区B

代理地址b

可用区B

可用区D

可用区D

可用区D

可用区D

可用区E

失效

变更代理配置时,支持变更可用区吗?

不支持。

如果需要迁移可用区,请参见迁移代理可用区

如何解决双可用区部署变更为单可用区部署时,报错:所有连接地址的vSwitchId必须在目标可用区?

双可用区部署(如可用区1+可用区2)变更为单可用区部署(如可用区1)时,需要先删除可用区2的代理连接地址。具体操作,请参见设置数据库代理连接地址