读写分离 本文主要介绍了读写分离的配置与使用。 特性 会话不开启事务,读语句直接发送到slave执行。 会话开启事务,读语句发送到master上执行。这样才能保证同个事务内的数据可见。 开启读写分离 DRDS使用以下两种方式开启读写分离功能: 配置DRDS balance参数。 在select语句前增加 / !HINT({"balance":"?"})/ 注解。 方式一:读写分离属性配置 您可以在控制台设置读写分离,支持的配置如下。具体操作,请参见关联MySQL设置。 关闭 :即balance 0,表示不开启读写分离,所有语句均发往写节点。 读语句发往读库 :即balance 1,表示开启读写分离,所有事务外(autocommit1)的SELECT语句发往读节点;所有事务内(autocommit0)的语句发往写节点。 读语句随机发往读库和写库 :即balance 2,表示开启读写分离,所有事务外(autocommit1)的SELECT语句随机发往读节点或写节点;所有事务内(autocommit0)的语句发往写节点。 自定义权重 :即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 属性进行读写分离需结合 autocommit1 使用,而 / !HINT({"balance":"?"})/ 方式不需要。