数据库
技术随笔
mysql 主从服务器的配置 实现读写分离
一、主服务器(Master)配置
修改 my.cnf,开启二进制日志并指定唯一 server-id:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW
# 可选:不同步系统库
# binlog-ignore-db = mysql重启 MySQL 后,创建一个专用于复制的账号:
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;记下输出的 File 与 Position(如 mysql-bin.000001 / 154),从库要用。
二、从服务器(Slave)配置
给从库一个不同的 server-id,然后指向主库:
[mysqld]
server-id = 2CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='repl123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUSG确认 Slave_IO_Running 与 Slave_SQL_Running 均为 Yes 即同步成功。
三、读写分离
主从搭好后,写请求走主库、读请求走从库,可显著减轻主库压力,常见做法:
- 应用层路由:配置两个数据源,写操作连 Master、读操作连 Slave(注意刚写入立刻读取可能因复制延迟读不到,需强制读主库)。
- 中间件:MySQL Router、ProxySQL、MyCat、ShardingSphere 等自动按 SQL 类型路由,对应用透明。
复制延迟是大并发下的主要痛点,可通过并行复制(slave_parallel_workers)、半同步复制等手段优化。