一、概述
-
核心逻辑:主库通过 二进制日志(Binlog) 记录 DDL/DML 操作,从库拉取日志并「重做」,实现数据一致。
-
支持架构:一主多从、链式复制(从库作为其他从库的主库)。
-
核心优势:
-
故障切换:主库故障时,从库可快速补位。
-
读写分离:主库负责写(增删改),从库负责读,分摊压力。
-
备份不影响主库:从库执行备份操作。
-
二、复制原理(三步法)
-
主库:事务提交时,将数据变更记录到 Binlog。
-
从库:IO 线程读取主库 Binlog,写入本地中继日志(Relay Log)。
-
从库:SQL 线程解析中继日志,执行相同操作,同步数据。
三、搭建步骤(精简版)
1. 前置准备(主从库均执行)
-
开放 3306 端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent -
重载防火墙:
firewall-cmd --reload
2. 主库配置
-
编辑
/etc/my.cnf:-
server-id=1(集群内唯一,1-2³²-1) -
read-only=0(主库可读可写) -
可选:
binlog-ignore-db=xxx(忽略同步库)/binlog-do-db=xxx(仅同步指定库)
-
-
重启 MySQL:
systemctl restart mysqld -
登录 MySQL,创建复制账号并授权:
CREATE USER 'repl'@'从库IP' IDENTIFIED WITH mysql_native_password BY '密码'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP'; -
查看 Binlog 坐标(需记录):
show master status;→ 记录File(日志文件名)和Position(起始位置)
3. 从库配置
-
编辑
/etc/my.cnf:-
server-id=2(集群内唯一,与主库不同) -
read-only=1(从库只读)
-
-
重启 MySQL:
systemctl restart mysqld -
登录 MySQL,配置主库信息:
CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', # 主库创建的复制账号 MASTER_PASSWORD='密码', MASTER_LOG_FILE='主库File值', # 主库第4步记录 MASTER_LOG_POS=主库Position值; # 主库第4步记录 -
启动同步:
start slave; -
验证状态:
show slave status;→ 核心看两项均为Yes:-
Replica_IO_Running(IO 线程正常) -
Replica_SQL_Running(SQL 线程正常)
-