在 WSL Ubuntu 上安装 ProxySQL 并配置 主从同步,读写分离,延迟检测
✅ 在 WSL Ubuntu 上安装 ProxySQL 并配置 MySQL 主从同步、读写分离、延迟检测
这是一个详细的教程,涵盖以下内容:
- 安装 MySQL(主库和从库)
- 配置 MySQL 主从同步
- 安装 ProxySQL
- 配置 ProxySQL 实现读写分离
- 配置 ProxySQL 延迟检测
- 测试和验证
🧰 环境和版本信息
组件 | 版本 |
---|---|
操作系统 | WSL Ubuntu |
MySQL | 8.x |
ProxySQL | 最新稳定版 |
🔧 步骤 1:在 WSL Ubuntu 上安装 MySQL(主库和从库)
1️⃣ 安装 MySQL
sudo apt update
sudo apt install mysql-server -y
2️⃣ 检查 MySQL 版本
mysql --version
如果默认安装的 MySQL 版本不是 8.x,可以从 MySQL 官方网站下载合适版本的 .deb
包:
- 下载地址:https://dev.mysql.com/downloads/mysql/
🔧 步骤 2:配置 MySQL 主从同步
主库配置
- 编辑主库的配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 在
[mysqld]
下添加以下内容:
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=mydatabase
- 重启 MySQL 服务:
sudo systemctl restart mysql
- 创建复制用户:
mysql -u root -p
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
记下 File 和 Position 信息。
从库配置
- 编辑从库的配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 在
[mysqld]
下添加以下内容:
server-id=2
relay_log=/var/log/mysql/mysql-relay-bin.log
- 重启 MySQL 服务:
sudo systemctl restart mysql
- 配置从库连接到主库:
mysql -u root -p
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
- 安装 ProxySQL:
sudo apt update
sudo apt install proxysql -y
- 启动 ProxySQL 服务:
sudo systemctl start proxysql
sudo systemctl enable proxysql
- 连接到 ProxySQL 管理界面:
mysql -u admin -p -h 127.0.0.1 -P 6032
默认用户名和密码都是 admin。
🔧 步骤 4:配置 ProxySQL 实现读写分离
配置主从节点
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 | 从库(读操作) |
配置读写分离规则
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 延迟检测
启用延迟检测
SET mysql-monitor_replication_lag_interval_ms = 1000;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
设置最大延迟阈值
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:测试配置
测试读写分离
- 连接到 ProxySQL 的数据接口:
mysql -u myuser -p -h 127.0.0.1 -P 6033
- 执行写操作:
INSERT INTO mydatabase.mytable (name) VALUES ('ProxySQL Test');
- 执行读操作:
SELECT * FROM mydatabase.mytable;
测试延迟检测
在主库上执行以下 SQL:
STOP SLAVE;
然后在 ProxySQL 中执行:
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 | 查看从库状态 |