在 WSL Ubuntu 上安装 ProxySQL 并配置 主从同步,读写分离,延迟检测

在 WSL Ubuntu 上安装 ProxySQL 并配置 MySQL 主从同步、读写分离、延迟检测

这是一个详细的教程,涵盖以下内容:

  1. 安装 MySQL(主库和从库)
  2. 配置 MySQL 主从同步
  3. 安装 ProxySQL
  4. 配置 ProxySQL 实现读写分离
  5. 配置 ProxySQL 延迟检测
  6. 测试和验证

🧰 环境和版本信息

组件 版本
操作系统 WSL Ubuntu
MySQL 8.x
ProxySQL 最新稳定版

🔧 步骤 1:在 WSL Ubuntu 上安装 MySQL(主库和从库)

1️⃣ 安装 MySQL

bash 复制代码
sudo apt update
sudo apt install mysql-server -y

2️⃣ 检查 MySQL 版本

bash 复制代码
mysql --version

如果默认安装的 MySQL 版本不是 8.x,可以从 MySQL 官方网站下载合适版本的 .deb 包:


🔧 步骤 2:配置 MySQL 主从同步

主库配置

  1. 编辑主库的配置文件
bash 复制代码
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  1. [mysqld] 下添加以下内容
ini 复制代码
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=mydatabase
  1. 重启 MySQL 服务
bash 复制代码
sudo systemctl restart mysql
  1. 创建复制用户
bash 复制代码
mysql -u root -p
sql 复制代码
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;

记下 FilePosition 信息。


从库配置

  1. 编辑从库的配置文件
bash 复制代码
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  1. [mysqld] 下添加以下内容
ini 复制代码
server-id=2
relay_log=/var/log/mysql/mysql-relay-bin.log
  1. 重启 MySQL 服务
bash 复制代码
sudo systemctl restart mysql
  1. 配置从库连接到主库
bash 复制代码
mysql -u root -p
sql 复制代码
CHANGE MASTER TO
MASTER_HOST='主库IP地址',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

START SLAVE;
SHOW SLAVE STATUS\G

🔧 步骤 3:在 WSL Ubuntu 上安装 ProxySQL

  1. 安装 ProxySQL
bash 复制代码
sudo apt update
sudo apt install proxysql -y
  1. 启动 ProxySQL 服务
bash 复制代码
sudo systemctl start proxysql
sudo systemctl enable proxysql
  1. 连接到 ProxySQL 管理界面
bash 复制代码
mysql -u admin -p -h 127.0.0.1 -P 6032

默认用户名和密码都是 admin


🔧 步骤 4:配置 ProxySQL 实现读写分离

配置主从节点

sql 复制代码
INSERT INTO mysql_servers (hostgroup_id, hostname, port)
VALUES (10, '主库IP地址', 3306),
       (20, '从库IP地址', 3306);

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
Hostgroup ID 描述
10 主库(写操作)
20 从库(读操作)

配置读写分离规则

sql 复制代码
INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup)
VALUES (1, 1, '^SELECT.*', 20),
       (2, 1, '^INSERT.*|^UPDATE.*|^DELETE.*', 10);

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

🔧 步骤 5:配置 ProxySQL 延迟检测

启用延迟检测

sql 复制代码
SET mysql-monitor_replication_lag_interval_ms = 1000;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

设置最大延迟阈值

sql 复制代码
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup, check_type, max_replication_lag)
VALUES (10, 20, 'seconds_behind_master', 5);

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

🔧 步骤 6:测试配置

测试读写分离

  1. 连接到 ProxySQL 的数据接口
bash 复制代码
mysql -u myuser -p -h 127.0.0.1 -P 6033
  1. 执行写操作
sql 复制代码
INSERT INTO mydatabase.mytable (name) VALUES ('ProxySQL Test');
  1. 执行读操作
sql 复制代码
SELECT * FROM mydatabase.mytable;

测试延迟检测

在主库上执行以下 SQL:

sql 复制代码
STOP SLAVE;

然后在 ProxySQL 中执行:

sql 复制代码
SELECT * FROM stats_mysql_connection_pool;

验证是否停止从库的读操作路由。


总结配置

配置项 描述
主从同步 配置 MySQL 主从复制
读写分离 ProxySQL 根据查询类型实现读写分离
延迟检测 ProxySQL 自动检测主从延迟,调整路由策略

🎯 常用命令汇总

命令 描述
sudo systemctl start proxysql 启动 ProxySQL
sudo systemctl restart proxysql 重启 ProxySQL
mysql -u admin -p -h 127.0.0.1 -P 6032 连接到 ProxySQL 管理界面
SHOW MASTER STATUS; 查看主库状态
SHOW SLAVE STATUS\G 查看从库状态
相关推荐
老师用之于民19 小时前
【DAY21】Linux软件编程基础&Shell 命令、脚本及系统管理实操
linux·运维·chrome·经验分享·笔记·ubuntu
darkb1rd20 小时前
五、PHP类型转换与类型安全
android·安全·php
gjxDaniel21 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj5021 小时前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
峥嵘life21 小时前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
stevenzqzq1 天前
Compose 中的状态可变性体系
android·compose
似霰1 天前
Linux timerfd 的基本使用
android·linux·c++
qinyia1 天前
通过本地构建解决Cartographer编译中absl依赖缺失问题
linux·运维·服务器·mysql·ubuntu
郝亚军1 天前
ubuntu启一个udp server,由一个client访问
linux·ubuntu·udp
予枫的编程笔记1 天前
【Linux入门篇】Linux入门不踩坑:内核、发行版解析+环境搭建全流程
linux·ubuntu·centos·vmware·xshell·linux入门·linux环境搭建