本文详细介绍了 MySQL 主从复制(Master-Slave)及双主双从(Master-Master with Slaves)高可用架构的搭建与配置方法。

09-38-08-J2VxkM_扫码_搜索联合传播样式-标准色版

参考来源: CNBlogs

1. 原理概述

1.1 主从复制机制

将主数据库(Master)的 DDL 和 DML 操作日志记录到二进制日志文件(Binary Log)中。从库(Slave)通过 I/O 线程请求主库的 Binlog,并将其写入到本地的中继日志(Relay Log)中。SQL 线程随后读取 Relay Log 并重放这些操作,从而实现数据同步。

1.2 架构作用

  • 高可用性:主库故障时,可快速切换至从库。
  • 负载均衡:实现读写分离,减轻主库压力。
  • 数据备份:作为实时备份,保障数据安全。

2. 一主一从配置 (Master-Slave)

服务器规划

服务器IP 角色
192.168.133.129 Master (主)
192.168.133.130 Slave (从)

2.1 主数据库 (Master) 安装与配置

假设使用 MySQL 8.0.20,安装过程略(解压、授权、初始化)。重点在于 my.cnf 配置。

修改 /etc/my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data
character-set-server=utf8
# 区分大小写设置
lower-case-table-names=1
default_authentication_plugin=mysql_native_password

# === 主从复制 - Master 配置 ===
# 唯一ID,必须区分
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 格式
binlog_format=STATEMENT
# 需要同步的库
binlog-do-db=test
# 忽略的库
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

创建同步用户:

登录 Master 数据库执行:

1
2
3
4
5
6
7
8
-- 创建用户
create user 'slave'@'%' identified with mysql_native_password by 'password';

-- 授权复制权限
grant replication slave on *.* to 'slave'@'%';

-- 刷新权限
flush privileges;

获取 Master 状态:

1
show master status;

记录下结果中的 File (文件名) 和 Position (位置),例如 mysql-bin.000001156

2.2 从数据库 (Slave) 安装与配置

修改 /etc/my.cnf

1
2
3
4
5
6
7
8
9
[mysqld]
basedir=/usr/local/mysql-8.0.20
datadir=/usr/local/mysql-8.0.20/data

# === 主从复制 - Slave 配置 ===
# 唯一ID,不能与Master相同
server-id=2
# 启用中继日志
relay-log=mysql-relay

配置同步参数:

登录 Slave 数据库执行:

1
2
3
4
5
6
7
8
9
10
11
-- 设置 Master 信息
change master to
master_host='192.168.133.129',
master_port=3306,
master_user='slave',
master_password='password',
master_log_file='mysql-bin.000001', -- 刚才记录的文件名
master_log_pos=156; -- 刚才记录的位置

-- 启动同步
start slave;

验证状态:

1
show slave status\G

检查 Slave_IO_RunningSlave_SQL_Running 是否均为 Yes


3. 双主双从配置 (Dual Master)

双主架构意味着两台服务器互为主从(Master1 是 Master2 的主,Master2 也是 Master1 的主),并且各自带一个从库。

服务器规划

服务器IP 角色 说明
192.168.133.129 Master1 与 Master2 互为主备
192.168.133.131 Master2 与 Master1 互为主备
192.168.133.130 Slave1 Master1 的从库
192.168.133.132 Slave2 Master2 的从库

3.1 配置文件差异

关键在于自增 ID的配置,防止双主写入冲突。

Master1 配置 (my.cnf)

1
2
3
4
5
server-id=1
log-bin=mysql-bin
log-slave-updates # 允许将复制来的数据写入自己的 binlog (级联复制需要)
auto-increment-increment=2 # 自增步长
auto-increment-offset=1 # 起始值 (1, 3, 5...)

Master2 配置 (my.cnf)

1
2
3
4
5
server-id=3
log-bin=mysql-bin
log-slave-updates
auto-increment-increment=2
auto-increment-offset=2 # 起始值 (2, 4, 6...)

3.2 互为主从设置

  1. Master1 上创建同步用户,并执行 change master to ... 指向 Master2
  2. Master2 上创建同步用户,并执行 change master to ... 指向 Master1
  3. 两边都执行 start slave

3.3 从库挂载

  • Slave1 配置 change master to 指向 Master1
  • Slave2 配置 change master to 指向 Master2

这样就构成了完整的双主双从高可用架构。