一、基于只读账号的读写分离
只读账号是一类仅有读权限的账号,默认从数据库集群中的从机(或只读实例)中读取数据。用户可以在 控制台 实例管理页的账号管理页中,设置只读账号和读策略:
在只读账号设置选项中,你可以设置只读请求分配策略,定义在备机故障(或延迟较大)时的读策略。只读备机延迟参数定义数据同步延迟时间,并与只读请求分配策略配合使用:
·选择主机则全部备机延迟时,从主机读取。
·选择直接报错则全部备机延迟时,直接报错。
·选择只从备机读取则忽略备机延迟,一直从备机读取(一般用于拉取 binlog 同步)。
·只读备机延迟参数定义数据同步延迟时间。
| 分配策略 | 只读固定备机 | 不只读固定备机 |
| 主机 | 延迟后,若大于延迟参数,则切换到主机读取 | 延迟后,若大于延迟参数,则先读其他备机,其他备机延迟后切换到主机读取 |
| 直接报错 | 延迟后,若大于延迟参数,则直接报错 | 延迟后,若大于延迟参数,则先读其他备机,其他备机延迟后直接报错 |
| 只从备机读取 | 延迟后,只读固定备机 | – |
注意:说明:
配置建议(例如你设计的是某交易系统):
·核心交易模块:设置常规账号,可读写。
·余额查询模块:设置只读账号,默认读备机;请求分配策略:备机故障读主机,并将延迟参数设置在十秒内,以保证主从性能和用户查询的数据一致性。
·批量查询模块:设置只读账号,默认读备机;请求分配策略:备机故障报错,延迟参数可设置在三十秒以上,以保证不影响主库性能。
另外,由于强同步机制是将数据写入从机事务日志后,即返回应答,这时从机库表数据可能并未更新,因此也会有延迟。
二、基于注释的读写分离
通过如下视频,你可以了解基于注释的读写分离的使用:
在每条需要从机“读”的 SQL 前,增加 /*slave*/ 字段,且 mysql 后面要增加 -c 参数来解析注释 mysql -c -e "/*slave*/sql",即可自动将读请求分配到从机,示例如下:
//主机读//select * from emp order by sal,deptno desc;//从机读///*slave*/ select * from emp order by sal,deptno desc;
三、只读实例(异地只读实例)
如果上述读写分离方案无法满足你的需求,TDSQL MySQL 版集中式数据库提供 只读实例 供你使用。只读实例是独立的数据库实例,不参与原主实例高可用切换,仅用于读性能扩展。