MySQL8.0云服务器读写分离高级教程:ProxySQL配置
文章分类:技术文档 /
创建时间:2025-10-31
在有限资源下,MySQL数据库的读写压力常成为业务瓶颈。尤其当读请求占比超70%时,单纯升级硬件成本高且效率低。这时,通过云服务器实现读写分离成为优选方案——而ProxySQL作为轻量级数据库中间件,能灵活分配读写流量,是中小团队的高性价比选择。
环境搭建:云服务器与ProxySQL的基础准备
首先需要两台核心设备:一台运行MySQL8.0的云服务器(承担实际数据存储),一台安装ProxySQL的服务器(作为流量分发枢纽)。选择云服务器的优势在于弹性扩展——当业务增长时,可直接在控制台调整CPU、内存配置,无需像物理机般更换硬件。
ProxySQL安装:以Ubuntu为例的快速部署
在ProxySQL服务器上,通过包管理器完成安装。操作简单到新手也能5分钟内完成:
```bash
sudo apt-get update
sudo apt-get install proxysql
```
安装完成后,系统会自动启动ProxySQL服务,默认监听6032(管理端口)和6033(业务端口)。
MySQL云服务器:为读写分离打基础
要让ProxySQL有效调度流量,MySQL云服务器需完成两项关键配置。
创建专用账号:让ProxySQL有权限连接
在MySQL命令行执行以下语句,创建名为"proxysql_user"的专用账号(建议定期更换密码):
```sql
CREATE USER 'proxysql_user'@'%' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON *.* TO 'proxysql_user'@'%';
FLUSH PRIVILEGES;
```
该账号需具备访问所有数据库的权限,确保ProxySQL能正常分发读写请求。
开启二进制日志:复制与分离的关键
编辑MySQL配置文件(通常路径为/etc/mysql/my.cnf),添加以下内容:
```ini
log-bin=mysql-bin # 开启二进制日志记录修改操作
server-id=1 # 服务器唯一标识,主从复制必备
```
保存后重启MySQL服务(sudo systemctl restart mysql),二进制日志将实时记录数据变更,为后续读写分离提供依据。
ProxySQL核心配置:实现流量智能分配
通过管理端口连接ProxySQL(默认账号admin,密码admin),输入命令:
```bash
mysql -u admin -p -h 127.0.0.1 -P 6032
```
进入管理界面后,分三步完成核心配置。
步骤1:绑定MySQL云服务器
执行以下SQL语句,告诉ProxySQL后端MySQL的位置(将"your_mysql_server_ip"替换为实际IP):
```sql
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, 'your_mysql_server_ip', 3306);
LOAD MYSQL SERVERS TO RUNTIME; # 加载配置到运行环境
SAVE MYSQL SERVERS TO DISK; # 持久化保存配置
```
步骤2:同步认证信息
让ProxySQL使用之前创建的"proxysql_user"账号连接MySQL:
```sql
INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('proxysql_user', 'your_secure_password', 1);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
```
步骤3:设置读写分离规则
最关键的一步——定义哪些请求走读库、哪些走写库(示例规则适用于大部分业务场景):
```sql
-- 匹配SELECT FOR UPDATE(需加锁的读请求)定向到写库
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) VALUES (1, 1, '^SELECT.*FOR UPDATE$', 1, 1);
-- 普通SELECT请求定向到读库(实际部署时可扩展读库数量)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) VALUES (2, 1, '^SELECT', 1, 1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
```
实战测试:验证读写分离效果
配置完成后,通过以下命令连接ProxySQL业务端口(将"your_proxysql_server_ip"替换为实际IP):
```bash
mysql -u proxysql_user -p -h your_proxysql_server_ip -P 6033
```
分别执行读、写操作验证效果:
```sql
-- 读操作应通过ProxySQL分发(观察响应时间是否缩短)
SELECT * FROM your_table LIMIT 10;
-- 写操作直接作用于MySQL云服务器(检查数据是否成功写入)
INSERT INTO your_table (username, create_time) VALUES ('test_user', NOW());
```
实际业务中,可通过云服务器监控面板查看MySQL的QPS(每秒查询数)变化——配置读写分离后,读请求占比应显著降低主库压力,写请求则保持低延迟。若发现流量分配异常,可回到ProxySQL管理界面调整查询规则。
通过这套方案,即使是中小团队也能用较低成本实现MySQL8.0云服务器的读写分离,为高并发业务场景提供更稳定的数据库支持。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 工信部备案:苏ICP备2025168537号-1
工信部备案:苏ICP备2025168537号-1