读写分离
更新时间 2025-09-11 18:04:22
最近更新时间: 2025-09-11 18:04:22
本文主要介绍了读写分离的配置与使用。
特性
会话不开启事务,读语句直接发送到slave执行。
会话开启事务,读语句发送到master上执行。这样才能保证同个事务内的数据可见。
开启读写分离
DRDS使用以下两种方式开启读写分离功能:
配置DRDS balance参数。
在select语句前增加 /* !HINT({"balance":"?"})*/ 注解。
方式一:读写分离属性配置
您可以在控制台设置读写分离,支持的配置如下。具体操作,请参见关联MySQL设置。
关闭:即
balance = 0
,表示不开启读写分离,所有语句均发往写节点。读语句发往读库:即
balance = 1
,表示开启读写分离,所有事务外(autocommit=1
)的SELECT语句发往读节点;所有事务内(autocommit=0
)的语句发往写节点。读语句随机发往读库和写库:即
balance = 2
,表示开启读写分离,所有事务外(autocommit=1
)的SELECT语句随机发往读节点或写节点;所有事务内(autocommit=0
)的语句发往写节点。自定义权重:即
banlance= 3
,表示开启读写分离,支持根据实际情况,设置自定义读写分离权重。
方式二:HINT语句
使用 /* !HINT({"balance":"?"})*/ 注解可以强制指定 select 语句按照指定规则进行读写分离, balance 有三种取值方式,与DRDS的 balance 属性类似:
/* !HINT({"balance":"0"})*/ 强制 select 语句发往写节点 。
/* !HINT({"balance":"1"})*/ 强制 select 语句发往读节点 。
/* !HINT({"balance":"2"})*/ 强制 select 语句随机发往数据库读节点或写节点。
注意
- insert, update, delete语句在任何情况下都将发往写节点,所以读写分离实际只针对select语句。
- /* !HINT({"balance":"?"})*/ 的读写分离规则优先级高于配置 balance 属性。
- 配置 balance 属性进行读写分离需结合 autocommit=1 使用,而 /* !HINT({"balance":"?"})*/ 方式不需要。