如何在mysql中设置单主多从架构

首先配置主库启用binlog并创建复制用户,然后为每个从库设置唯一server-id并配置连接主库的复制参数,最后验证各从库的Slave_IO_Running和Slave_SQL_Running状态为Yes,确认数据同步正常。

MySQL 中实现单主多从架构,主要是通过配置主从复制(Replication)来完成。这种架构下,一个主库(Master)负责处理写操作,多个从库(Slave)同步主库的数据并可承担读请求,从而提升系统读性能和高可用性。

1. 确认环境与网络连通性

确保主从服务器之间网络互通,MySQL 版本尽量一致或兼容。通常建议使用 GTID 或基于二进制日志(binlog)的异步复制。

  • 主库和所有从库能相互通过 IP 和端口通信(默认 3306)
  • 关闭防火墙或开放 3306 端口
  • 各节点时间同步(使用 NTP)

2. 配置主库(Master)

编辑主库的 my.cnf(或 my.ini)配置文件,启用 binlog 并设置唯一 server-id。

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
expire-logs-days = 7
max-binlog-size = 100M

重启 MySQL 服务后,登录主库创建用于复制的账号:

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

查看主库状态,记录 File 和 Position 值:

SHOW MASTER STATUS;

3. 配置各个从库(Slave)

每个从库也需要唯一的 server-id,并可选择是否开启 relay log。

[mysqld]
server-id = 2 # 每个从库 id 不同,如 3、4...
relay-log = mysql-relay-bin
read-only = 1

重启从库 MySQL 服务,然后连接到主库进行复制配置:

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password',
  MASTER_LOG_FILE='mysql-bin.000001',  -- 来自 SHOW MASTER STATUS
  MASTER_LOG_POS=154;                  -- 来自 SHOW MASTER STATUS

START SLAVE;

重复此步骤为每个从库配置,注意修改 server-id 和 IP 地址。

4. 验证复制状态

在每个从库上执行:

SHOW SLAVE STATUS\G

检查以下两个关键字段:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

若均为 Yes,说明复制正常。如果有错误,查看 Last_Error 信息进行排查。

可通过在主库创建数据库或表,验证是否同步到各从库。

基本上就这些。单主多从架构搭建完成后,可结合中间件(如 MyCat、ProxySQL)实现读写分离,进一步发挥从库作用。