华为云云数据库rds数据库代理使用规范建议_云淘科技
rdsProxy是数据库代理账户,属于RDS数据库内置账号,建议您不要创建同名账户,避免影响读写分离功能正常运行。
功能限制
开启读写分离功能后,删除RDS for MySQL主实例,会同步删除只读实例,并关闭读写分离功能。
读写分离不支持RDS for MySQL8.0的caching_sha2_password身份认证插件。
开启读写分离功能后,主实例和只读实例均不允许修改数据库端口和内网地址。
读写分离功能不支持压缩协议。
读写分离不支持事务隔离级别READ-UNCOMMITTED。
如果执行了Multi-Statements,默认当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离,目前支持多种Multi-Statements处理模式,详情参考设置Multi-Statements处理模式。
使用读写分离的连接地址时,事务请求都会路由到主实例(可以使用事务拆分功能对事务中写之前的读请求进行拆分),不保证非事务读的一致性,业务上有读一致性需求可以封装到事务中。
使用读写分离的连接地址时,LAST_INSERT_ID()函数仅支持在事务中使用。
使用用户自定义变量时,包含用户自定义变量的语句会路由到主节点。
数据库代理服务不支持读写表中单列超过16MB的数据。
当使用数据库代理时,多语句拼接的SQL大小不超过100MB,避免数据库代理解析SQL消耗过多的资源。
当使用.net客户端连接数据库代理时,需要客户端的MySQL.Data驱动版本不低于8.0.19,低版本MySQL.Data与数据库代理存在兼容性风险。
当使用事务拆分功能时,需要将代理升级至最新版。
语法限制
读写分离请求路由原理:客户的前端请求会根据当前数据库节点权重的配置,随机路由到后端任一数据库节点。
因此,一些SQL语句多次执行的结果可能存在差异,部分语句列举如下:
使用读写分离地址连接proxy和直连后端数据库执行show processlist结果返回有差异,因为proxy的show processlist是逻辑的,仅仅将通过proxy节点下发的业务展示出来,所以和直连后端数据库有差异。
当某一个代理节点处于异常状态时,通过读写分离地址连接proxy执行show processlist或者kill时,有可能会出现命令执行时间稍微变长或卡顿的情况,此时无需关注,业务不会受到影响。
当数据库代理节点缩容后,通过代理执行show processlist命令时,可能会将被缩容的节点上的业务展示出来。
通过数据库代理进行kill时,可能会出现超时等报错信息,此时可以通过再次执行show processlist查看业务是否真正被kill成功。
使用读写分离的连接地址时,不支持使用show errors和show warnings命令。
使用读写分离的连接地址时,如果存储过程(procedure)和函数(function)中依赖了用户变量,即@variable,则运行结果可能不正确。
父主题: 数据库代理(读写分离)
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家