ProxySQL 实现 MySQL 读写分离
type
status
date
slug
summary
tags
category
icon
password
一、ProxySQL 简介
ProxySQL 是一个高性能的 MySQL 中间件,主要用于:
- 读写分离:自动将写操作发往主库,读操作发往从库。
- SQL 路由:可基于用户、数据库、SQL 语句等进行路由。
- 查询缓存:缓存常用查询结果,减轻数据库压力。
- 健康检查:自动检测后端数据库状态,故障自动切换。
二、环境准备
角色 | IP | 说明 |
MySQL 主库 | 192.168.140.10 | 写操作 |
MySQL 从库 | 192.168.140.11 | 读操作,只读 |
ProxySQL 服务器 | 192.168.140.12 | 中间件 |
🔧 从库需设置 read_only = 1。
三、安装 ProxySQL
- 6032:管理端口(配置用)
- 6033:业务端口(应用连接用)
四、ProxySQL 内置数据库说明
登录管理端:
数据库名 | 说明 |
main | 内存配置表,需持久化 |
disk | 持久化的配置 |
stats | 统计信息 |
monitor | 健康检查信息 |
stats_history | 历史统计信息 |
五、配置步骤
1. 在主库创建 ProxySQL 连接用户
2. 在 ProxySQL 中添加后端服务器
hostgroup_id:服务器所属的 主机组 ID。- 组通常用来区分读写,例如
1可能是写组(主库),2可能是读组(从库)。
hostname:数据库服务器的 IP 地址或主机名。
port:数据库服务的端口,默认 MySQL 就是3306。
weight:权重,负载均衡时会用到。权重越大,流量分配比例越高。
comment:说明文字,方便管理时识别。
3. 添加数据库用户(用于业务连接)
- username:
- 代理用户的用户名,这里是
proxyuser。 - 应用程序连接 ProxySQL 时会用到它。
- password:
- 用户密码,这里是
MMM.1.com。 - 与
username配合使用,用于认证。
- default_hostgroup:
- 默认主机组 ID,这里是
1。 - 当没有匹配到特定的
query rule时,SQL 请求会默认转发到该主机组。 - 这里意味着
proxyuser默认连到 写库组 (1)。
- transaction_persistent:
- 值为
1,表示 事务持久化。 - 一旦事务开始(比如
BEGIN),后续所有语句(不管是读还是写)都会固定在同一个主机组里执行,直到事务结束。 - 这样可以保证事务的一致性(避免事务内一部分语句跑到主库,一部分跑到从库)。
4. 配置健康检查用户
在主库创建:
在 ProxySQL 中设置:
5. 配置读写分离规则
- rule_id:规则 ID,唯一标识一条规则。
- active:是否启用该规则。
1 = 启用,0 = 禁用。
- match_digest:正则表达式,用来匹配 SQL 语句。
- destination_hostgroup:匹配成功后 SQL 请求要转发到的主机组 ID。
- apply:是否立即应用该规则。
1 = 应用,0 = 不应用。
六、测试读写分离
1. 连接业务端口:
2. 执行 SQL,查看路由情况:
七、WordPress 配置示例
修改
wp-config.php:✅ 补充知识点
- hostgroup_id:1 通常表示写组,2 表示读组。
- 持久化:
SAVE ... TO DISK将配置写入磁盘,LOAD ... TO RUNTIME使其生效。
- 健康检查:ProxySQL 会定期检查后端数据库状态,自动剔除故障节点。
Loading...