单库迟早会遇到瓶颈
前面我们在雨云云服务器上装好了 MySQL,单库跑业务没问题。但当读请求(列表、详情、统计)远多于写请求时,所有查询都压在同一台机器上,CPU 和连接数很快到顶。最经典的优化就是主从复制 + 读写分离:一台主库负责写,一到多台从库负责读,读流量被分流出去,主库压力立刻降下来,顺带还多了份实时备份。
一、架构与准备
最少两台雨云云服务器:一台主库(master)、一台从库(slave),配置 2 核 2G 起步,数据量大再加从库。机器放同一私有网络(参考内网互联那篇),主从之间走内网同步,免费又低延迟。购买走 雨云专属入口 jiyueip.com/link/5617 填优惠码 admin01 五折;用了国内节点对外提供数据库相关服务要按规定备案。
二、主库开启 binlog
主库改 /etc/mysql/mysql.conf.d/mysqld.cnf:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
重启 sudo systemctl restart mysql。然后建一个专用于复制的账号:
CREATE USER 'repl'@'从库内网IP' IDENTIFIED BY '强密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库内网IP';
FLUSH PRIVILEGES;导出当前数据给从库:mysqldump -u root -p –single-transaction –master-data=2 appdb > appdb.sql,记下其中的 binlog 位置。
三、从库接入主库
从库也设 server-id = 2,导入主库数据后执行:
CHANGE MASTER TO
MASTER_HOST='主库内网IP',
MASTER_USER='repl',
MASTER_PASSWORD='强密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=XXX;
START SLAVE;看 SHOW SLAVE STATUSG,Slave_IO_Running 和 Slave_SQL_Running 都是 Yes 就成功了。之后主库写入,从库会自动同步。
四、应用层读写分离
p
数据库层只负责同步,读写分离要在应用里做。比如在代码里配两个数据源:写操作走主库连接,读操作走从库连接;或用 ShardingSphere、ProxySQL 这类中间件统一路由。简单场景手动分两个连接字符串最直观。
五、常见故障排查
| 现象 | 可能原因 |
|---|---|
| Slave_IO_Running: No | 主从网络不通、复制账号密码错、server-id 冲突 |
| Slave_SQL_Running: No | 从库执行中继日志出错(如主键冲突),需查 Last_Error |
| 同步延迟大 | 主库写太猛或從库性能差,可加从库或优化大事务 |
合规使用提醒
主从复制仅用于你合法业务的数据库高可用与性能优化。数据库中若含用户个人信息,须遵守《个人信息保护法》,主从库均须做好访问控制与加密存储,复制账号权限应最小化,不得用于未授权数据流转。






