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...