在 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;

记下 File 和 Position 信息。


从库配置

  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 查看从库状态
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui