云服务器内容精选

  • 注意事项 某些业务对全局一致性有要求,开启事务拆分后将不满足全局一致性,因此在开启事务拆分前请评估事务拆分功能是否适用于您的业务。 代理实例的状态必须均为“正常”。 开启事务拆分时,需要将代理更新至最新版本,新版本优化了事务的处理逻辑。 开启事务拆分后,使用BEGIN提交事务后的读请求暂时不支持拆分到读库。 开启事务拆分后,使用SET AUTOCOMMIT = 0开启的事务,COMMIT提交后的读请求不支持拆分到读库。
  • 数据库代理内核版本说明 本章节介绍云数据库 RDS for MySQL的数据库代理内核版本更新说明。 版本 说明 2.24.09.020 新功能 Proxy支持IPv6。 修复问题 修复开启SSL后Proxy的资源回收较慢问题。 修复开启事务拆分时,使用set autocommit=0开启事务,用commit提交事务后,事务拆分无法拆出后续的读请求的问题。 2.24.06.000 修复问题 修复以“(”开头的SELECT语句的请求会发往主的问题。 2.23.12.000 新功能 优化Proxy认证同步时延,新建账号和数据库可以更快同步。 Proxy支持报错全链路跟踪。 用户界面支持慢SQL展示。 2.23.09.002 修复问题 优化数据库宕机后Proxy重试业务SQL的逻辑。 2.23.09.001 修复问题 修复Prepare协议下,select for update执行偶现报错问题。 2.23.09.000 新功能 支持Change User协议。 支持多Hint解析。 支持show processlist和kill命令。 2.23.06.001 修复问题 解决会话连接池开启导致后端数据库连接数升高问题。 2.23.06.000 新功能 支持通过Proxy内核拉取Binlog。 修复问题 进一步优化prepare stmt协议表现。 2.23.02.007 修复问题 优化prepare stmt协议表现。 解决/* FORCE_SLAVE*/ Hint语句流量分配不符合预期问题。 解决事务拆分开启时,set autocommit同步到只读问题。 2.23.02.000 修复问题 优化数据库代理的性能。 2.22.11.000 新功能 支持设置Multi-Statements处理模式。 修复问题 部分特殊场景SQL执行报错信息优化。 2.22.07.000 新功能 支持会话级连接池。 支持动态智能负载。 修复问题 优化数据库代理session级事务隔离级别设置逻辑,默认与数据库同步。 2.7.5.0 支持ALT。 2.7.4.0 新功能 支持16MB以上查询数据。 修复问题 优化只读模式Proxy的 CES 采集指标。 2.3.9.8 新功能 支持Prepare协议Batch操作。 2.3.9.7 新功能 数据库代理支持MySQL 8.0。 支持事务拆分。 支持只读模式 修复问题 优化prepare语句执行逻辑,提升性能。 2.3.9.0 新功能 新增数据库代理性能监控指标(每秒平均创建前端连接数、每秒平均事务中的查询数、每秒平均多语句执行数),详情见表2。 修复问题 优化数据库代理的性能。 优化数据库代理在短连接场景下出现的业务拥塞问题。 2.3.8.0 新功能 RDS for MySQL连接通过数据库代理也能获取到真实客户端IP。 修复问题 修复数据库代理监控数据不准确的问题。 优化RDS for MySQL主备倒换数据库代理中断的时长。 2.3.6.0 优化数据库代理的稳定性,修复业务量过大时出现的连接失败问题。 优化数据库代理MySQL协议的兼容性。 2.3.1.0 支持客户端到数据库代理的连接保持功能。 支持数据库代理性能指标监控,详情见表2。 父主题: 数据库代理内核版本
  • 基本概念 代理地址 购买数据库代理后,可以从数据库代理中查看代理地址,连接该地址可以执行读写操作,数据库代理会通过代理地址自动将写请求发送到主节点,将读请求发送到只读节点,降低主节点的压力。 事务拆分 数据库代理提供事务拆分的功能,能够将事务内写操作之前的读请求转发到只读节点,降低主节点负载。 更多关于事务拆分的内容请参见设置事务拆分。 连接池 数据库代理提供了会话级连接池,可减少短连接业务频繁建立连接导致数据库负载高。 更多关于连接池的内容请参见设置连接池。 路由模式 RDS for MySQL数据库代理支持权重负载和负载均衡路由模式,可根据需要配置不同的路由模式。 权重负载:根据您设置的读权重比例分发读请求。 负载均衡:根据数据库节点的活跃连接数情况进行读请求分发,将读请求分发到活跃连接数较少的节点上。负载均衡模式不需要修改权重。 更多关于路由模式的内容请参见设置延时阈值和路由模式。
  • 读写分离原理 RDS for MySQL支持开通一个或多个数据库代理。 单个数据库代理下的读写分离 一个RDS for MySQ L实例 下只有1个数据库代理实例,应用服务通过数据库代理地址连接到数据库代理实例,写请求通过数据库代理实例自动转发到主节点,读请求根据数据库代理实例的路由模式转发至主节点或只读节点。 图1 单个数据库代理原理图 多个数据库代理下的读写分离 一个RDS for MySQL实例下可以创建多个数据库代理实例,最多支持创建4个代理实例,主要适用于有隔离需求的复杂业务。不同的应用服务可以根据业务需要连接不同的数据库代理,数据库代理连接指定的只读节点,将不同应用服务之间的读请求最终转发到不同的只读节点上,实现业务隔离。 图2 多个数据库代理原理图
  • 请求路由规则 只发往主节点 INSERT、UPDATE、DELETE、SELECT FOR UPDATE。 所有DDL操作(建表/库、删表/库、变更表结构、权限等)。 所有事务中的请求(事务拆分开启时部分读请求可能发送至只读节点,详见设置事务拆分)。 用户自定义函数。 存储过程。 Multi Statements。 使用到临时表的请求。 SELECT last_insert_id()。 所有对用户变量的查询和更改。 发往只读节点或主节点 非事务中的SELECT。 COM_STMT_EXECUTE命令。 总是发往所有节点 所有系统变量的更改。 USE命令。
  • 读写分离优势 相比在应用程序内手动做读写分离,扩容灵活,维护成本低。 客户端读请求按权重分发至后端只读节点,数据库实例整体负载更加均衡,提升资源利用率。 通过代理将指定业务的读请求路由到选定的只读实例上,实现业务隔离,避免多个业务之间相互影响。 数据库代理默认提供过载保护功能:避免用户执行大结果集操作时,因压力过大引起服务端OOM。该功能默认打开,不需要用户单独设置。数据库内核压力较大时,需要依赖数据库本身的限流机制。
  • URI URI格式 DELETE /v3/{project_id}/instances/{instance_id}/proxy URI样例 https://{endpoint}/v3/0483b6b16e954cb88930a360d2c4e663/instances/f569f1358436479dbcba8603c32cc4aein03/proxy 参数说明 表1 参数说明 名称 是否必选 说明 project_id 是 租户在某一region下的project ID。 获取方法请参见获取项目ID。 instance_id 是 实例ID。
  • 请求示例 开启数据库代理。 POST https://{endpoint}/v3/23a50154cf494ec9ad6883979a12db0a/instances/920ec36cef814a8b830a5bed50d9a088in01/proxy/open { "flavor_ref": "rds.proxy.xlarge.2", "node_num": 2, "proxy_name": "proxy-test", "nodes_read_weight": [ { "instance_id": "917c67424dd54af3addf537a069e5b20in01", "weight": 1 } ] }
  • TaurusDB代理内核版本发布记录 发布日期 版本 说明 2024-07-30 2.24.06.000 新增功能:支持通过数据库代理内核拉取Binlog。 修复问题:开启事务拆分后,SELECT FOR UPDATE后的读请求会发往主库。 2024-05-07 2.24.03.000 新增行列自动分流功能。 2024-01-15 2.23.12.000 新增功能:支持数据库代理慢日志统计。 修复问题:修复数据库代理同步认证信息存在延时的问题。 2024-01-04 2.23.09.002 修复问题:修复数据库故障后数据库代理重试业务SQL的逻辑。 2023-11-13 2.23.09.001 修复问题:修复Prepare协议下,执行SELECT FOR UPDATE偶现报错问题。 2023-10-20 2.23.09.000 新增功能: 支持Change User协议。 支持多Hint解析。 支持SHOW PROCESSLIST和KILL命令。 2023-07-31 2.23.06.001 修复问题:修复会话连接池开启导致后端数据库连接数升高问题。 2023-07-06 2.23.06.000 新增功能:支持通过数据库代理内核拉取Binlog。 修复问题:进一步优化PREPARE STMT协议表现。 2023-06-11 2.23.02.007 修复问题: 优化PREPARE STMT协议表现。 修复/* FORCE_SLAVE*/ Hint语句流量分配不符合预期的问题。 修复事务拆分开启时,set autocommit同步到只读的问题。 2023-04-27 2.23.02.000 修复问题:优化数据库代理的性能。 2022-12-05 2.22.11.000 新增功能:支持设置Multi-Statements处理模式。 修复问题:部分特殊场景SQL执行报错信息优化。 2022-09-06 2.22.07.000 新增功能: 支持会话级连接池。 支持动态智能负载。 修复问题:优化数据库代理Session级事务隔离级别设置逻辑,默认与数据库同步。 2022-06-15 2.7.5.0 新增功能:支持ALT。 2022-05-06 2.7.4.0 新增功能: 支持16MB以上的查询请求。 支持会话一致性。 修复问题:优化只读模式下数据库代理的CES采集指标。 2022-04-01 2.3.9.8 新增功能:支持PREPARE协议BATCH操作。 2022-02-09 2.3.9.7 新增功能: 支持事务拆分。 支持只读模式。 修复问题:优化PREPARE语句执行逻辑,提升性能。 2021-04-23 2.3.9.0 新增功能:新增数据库代理性能监控指标(每秒平均创建前端连接数、每秒平均事务中的查询数、每秒平均多语句执行数)。 修复问题: 优化数据库代理的性能。 优化数据库代理在短连接场景下出现的业务拥塞问题。 2021-01-14 2.3.8.0 新增功能:TaurusDB连接通过数据库代理也能获取到客户端IP。 修复问题: 修复数据库代理监控数据不准确的问题。 优化TaurusDB主备倒换数据库代理中断的时长。 2020-10-14 2.3.6.0 修复问题: 优化数据库代理的稳定性,修复业务量过大时出现的连接失败问题。 优化数据库代理MySQL协议的兼容性。 2020-08-14 2.3.1.0 新增功能: 支持客户端到数据库代理的连接保持功能。 支持数据库代理性能指标监控。 父主题: 数据库代理内核版本
  • 步骤5:验证读写分离效果 您可以在每次执行完对应的读操作后,通过show last route命令来查看本次读操作的路由结果。 以下步骤以一条读操作为例,介绍查看读请求的路由结果。 连接到TaurusDB实例后,执行读操作。 例如:select 1; 执行如下命令,查看1中读操作的路由结果。 show last route 图8 结果查询 请勿将show last route用于业务代码或包在Multi-Statements中执行。
  • 步骤2:进行用户认证 在使用数据库代理连接TaurusDB实例前,需要确保当前数据库账号具有访问数据库代理地址的权限,否则将无法通过数据库代理连接到TaurusDB实例。 您可以通过以下步骤来检查权限并授权该账号访问数据库代理地址的权限。 连接TaurusDB实例。 具体操作请参见连接实例。 实例连接成功后,执行下列SQL语句,查看当前数据库账号的host是否包含数据库代理地址。 SELECT user,host FROM mysql.user; 代理地址获取方式: 单击目标TaurusDB实例,进入基本信息页面。在左侧导航栏单击“数据库代理”,在代理实例列表中查看数据库代理地址。 图3 查看代理地址 如果查询的host不包含数据库代理所在网段,则需要赋予远程访问权限。 例如:使用root用户想要从192.168.0网段连接到TaurusDB实例,您可以在DAS用户管理界面将当前账号的主机设置为192.168.%。具体操作请参见编辑用户信息。 图4 设置主机IP
  • 使用须知 设置事务拆分需要满足数据库代理内核版本为2.3.9.5及以上。 在默认的“REPEATABLE_READ”隔离级别下,云数据库TaurusDB不支持事务拆分功能。 仅“READ-UNCOMMITTED”和“READ-COMMITTED”级别允许事务拆分。 仅读写模式的数据库代理支持事务拆分功能。 当事务拆分功能开启后,仅支持将事务隔离级别修改为“READ-UNCOMMITTED”或“READ-COMMITTED”,若需要将事务隔离级别修改至更高的级别,需要关闭事务拆分功能。
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 job_id String 任务ID。 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。 状态码: 500 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用 IAM 服务获取用户Token接口获取。 请求响应成功后在响应消息头中包含的“X-Subject-Token”的值即为Token值。 X-Language 否 String 请求语言类型。默认en-us。 取值范围: en-us zh-cn 表3 请求Body参数 参数 是否必选 参数类型 描述 route_mode 是 Integer 数据库代理路由模式。 取值范围: 0:表示权重负载模式。 1:表示负载均衡模式(数据库主节点不接受读请求)。 2:表示负载均衡模式(数据库主节点接受读请求)。 master_weight 否 Integer 主节点权重: 如果路由模式为0,取值为0~1000。 如果路由模式为1,取值为0。 如果路由模式为2,取值为1。 readonly_nodes 否 Array of ModifyProxyRouteWeightReadonlyNode objects 只读节点权重配置信息。 new_node_auto_add_status 否 String 是否开启新增节点自动加入该Proxy。如果需要设置是否开启新增节点自动加入该Proxy,请联系客服人员添加白名单,加入白名单后,方可输入该字段。 取值范围: ON:开启。 OFF:关闭。 new_node_weight 否 Integer 新增节点的读权重: 如果路由模式为0,新增节点自动加入为ON,取值为0~1000。 如果路由模式不为0或新增节点自动加入为OFF,则可不输入读权重。 表4 ModifyProxyRouteWeightReadonlyNode 参数 是否必选 参数类型 描述 id 是 String 只读节点ID。 weight 是 Integer 只读节点权重: 如果路由模式为0,取值为0~1000; 如果路由模式为1或2,取值为0或1。
  • 请求示例 修改路由模式为权重负载模式。 PUT https://{endpoint}/v3/619d3e78f61b4be68bc5aa0b59edcf7b/instances/e73893ef73754465a8bd2e0857bbf13ein07/proxy/e87088f0b6a345e79db19d57c41fde15po01/route-mode { "route_mode" : 0, "master_weight" : 100, "readonly_nodes" : { "id" : "d23535333138462880bfa1838fdfced2no07", "weight" : 200 } } 修改路由模式为负载均衡模式(数据库主节点不接受读请求)。 PUT https://{endpoint}/v3/619d3e78f61b4be68bc5aa0b59edcf7b/instances/e73893ef73754465a8bd2e0857bbf13ein07/proxy/e87088f0b6a345e79db19d57c41fde15po01/route-mode { "route_mode" : 1, "master_weight" : 0, "readonly_nodes" : { "id" : "d23535333138462880bfa1838fdfced2no07", "weight" : 1 } } 修改路由模式为负载均衡模式(数据库主节点接受读请求)。 PUT https://{endpoint}/v3/619d3e78f61b4be68bc5aa0b59edcf7b/instances/e73893ef73754465a8bd2e0857bbf13ein07/proxy/e87088f0b6a345e79db19d57c41fde15po01/route-mode { "route_mode" : 2, "master_weight" : 1, "readonly_nodes" : { "id" : "d23535333138462880bfa1838fdfced2no07", "weight" : 0 } }