在 ProxySQL 的默认配置下,当所有从库出现故障时,查询请求不会自动切换到主库,这会导致业务中断。
以下是一个示例说明:
假设你的架构是一主一从,主库监听在 6666 端口,从库监听在 6667 端口。
现在,如果你关闭从库 6667 端口,你会发现 select 查询请求挂起,业务中断,并且请求没有切换到主库:
在 /var/lib/proxysql/proxysql.log
日志中,你可能会看到如下错误信息:
解决方案
为了解决这个问题,你可以调整 mysql_servers
表的数据,将主库也加入到从库的 reader_hostgroup
组中。
如下是具体的操作步骤:
- 通过查询
mysql_replication_hostgroups
表,确认主库与从库的hostgroup_id
组ID:
- 主库 (6666 端口) 的
hostgroup_id
为 0。 - 从库 (6667 端口) 的
hostgroup_id
为 1。
- 将主库添加到从库的
reader_hostgroup
组里:
经过上述配置,当从库出现故障时,查询请求将自动切换到主库,从而避免业务中断。