MySQL主从复制(日志核心)完整教程(适合新手操作)

来源:这里教程网 时间:2026-03-11 09:12:17 作者:
一、核心日志概念(先理解再配置)二、环境准备(必做)三、主库配置(核心:开启 binlog)步骤 1:修改主库配置文件步骤 2:重启主库 MySQL 生效步骤 3:主库创建复制专用用户步骤 4:查看主库 binlog 状态(关键!)四、从库配置(核心:同步主库 binlog 到 relay log)步骤 1:修改从库配置文件步骤 2:重启从库 MySQL步骤 3:配置从库连接主库(核心命令)五、验证主从复制(日志同步状态)1. 从库查看复制状态(核心命令)2. 日志同步测试六、日志管理(日常维护)1. 查看 binlog(主库)2. 查看 relay log(从库)3. 清理过期日志(避免磁盘满)七、常见日志相关故障排查

下面为你整理了MySQL 主从复制(日志核心)完整教程,聚焦 binlog(主库日志)、relay log(从库日志)的配置与管理,适配 MySQL 5.7/8.0 版本,新手可直接跟着操作。

一、核心日志概念(先理解再配置)

主从复制的核心是日志同步,先搞懂 2 个关键日志:

日志类型作用存储位置(默认)二进制日志(binlog)主库记录所有数据修改操作(增删改、DDL),是主从同步的数据源/var/lib/mysql/mysql-bin.*中继日志(relay log)从库读取主库 binlog 后,本地保存的日志文件,从库执行该日志完成数据同步/var/lib/mysql/relay-log.*

二、环境准备(必做)

角色IPMySQL版本核心要求主库(Master)192.168.1.105.7/8.0开启 binlog、唯一 server-id从库(Slave)192.168.1.115.7/8.0唯一 server-id、开启 relay log

前置条件

    主从服务器网络互通(ping 通、3306 端口开放);主从 MySQL 版本尽量一致;主从服务器时间同步(ntpdate ntp.aliyun.com)。

三、主库配置(核心:开启 binlog)

步骤 1:修改主库配置文件

编辑 MySQL 配置文件(不同系统路径不同):

# CentOS/RHEL:/etc/my.cnf # Ubuntu/Debian:/etc/mysql/mysql.conf.d/mysqld.cnf sudo nano /etc/my.cnf

添加/修改以下配置(重点开启 binlog):

[mysqld] # 1. 必须:唯一server-id(主从不能重复,建议用IP最后一段) server-id = 10 # 2. 必须:开启binlog,指定日志前缀 log-bin = mysql-bin # 3. 可选:binlog格式(推荐ROW,最安全) binlog_format = ROW # 4. 可选:同步的数据库(仅同步db_test,不写则同步所有) # binlog-do-db = db_test # 5. 可选:忽略同步的数据库 # binlog-ignore-db = mysql # 6. 可选:binlog过期时间(自动清理,避免日志占满磁盘) expire_logs_days = 7

步骤 2:重启主库 MySQL 生效

# CentOS 7+ sudo systemctl restart mysqld # Ubuntu/Debian sudo systemctl restart mysql

步骤 3:主库创建复制专用用户

登录主库 MySQL,创建仅用于主从复制的用户(最小权限原则):

-- 登录主库 mysql -uroot -p -- 创建用户(MySQL 5.7/8.0 通用,指定从库IP访问) CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'Repl@123456'; -- 授权复制权限(仅需REPLICATION SLAVE) GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11'; -- MySQL 8.0 需刷新权限(5.7可选) FLUSH PRIVILEGES;

步骤 4:查看主库 binlog 状态(关键!)

-- 主库执行,记录2个值:File、Position SHOW MASTER STATUS;

输出示例(后续从库配置需要这两个值):

+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | db_test | mysql | | +------------------+----------+--------------+------------------+-------------------+

四、从库配置(核心:同步主库 binlog 到 relay log)

步骤 1:修改从库配置文件

sudo nano /etc/my.cnf # 同主库路径规则

添加/修改配置:

[mysqld] # 1. 必须:唯一server-id(不能和主库重复) server-id = 11 # 2. 可选(默认开启):指定relay log前缀 relay-log = mysql-relay-bin # 3. 必须:关闭从库binlog(如果从库不做其他从库的主库) # log-bin = mysql-bin # 注释掉或删除 # 4. 可选:从库只读(避免直接修改从库数据) read_only = 1 # 5. 可选:超级用户也只读(MySQL 5.7+) super_read_only = 1

步骤 2:重启从库 MySQL

sudo systemctl restart mysqld # 同主库命令

步骤 3:配置从库连接主库(核心命令)

登录从库 MySQL,执行以下命令(替换括号内的主库信息):

-- 登录从库 mysql -uroot -p -- 停止从库复制(首次配置先停止) STOP SLAVE; -- 配置主从连接(关键!替换以下参数) CHANGE MASTER TO MASTER_HOST='192.168.1.10', -- 主库IP MASTER_USER='repl', -- 主库创建的复制用户 MASTER_PASSWORD='Repl@123456', -- 复制用户密码 MASTER_LOG_FILE='mysql-bin.000001', -- 主库SHOW MASTER STATUS的File值 MASTER_LOG_POS=154; -- 主库SHOW MASTER STATUS的Position值 -- 启动从库复制 START SLAVE;

MySQL 8.0 注意:如果主库默认认证插件是 caching_sha2_password,需在 CHANGE MASTER TO 后追加:

MASTER_AUTH_PLUGIN='mysql_native_password';

五、验证主从复制(日志同步状态)

1. 从库查看复制状态(核心命令)

SHOW SLAVE STATUS\G;

重点看 2 个参数(均为 Yes 则正常):

Slave_IO_Running: Yes → 从库 IO 线程正常(读取主库 binlog 到 relay log)Slave_SQL_Running: Yes → 从库 SQL 线程正常(执行 relay log 中的操作)

2. 日志同步测试

主库创建数据库/表/插入数据:

CREATE DATABASE test_db; USE test_db; CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1); 从库查看是否同步:

SHOW DATABASES; -- 能看到test_db USE test_db; SELECT * FROM t1; -- 能查到id=1

六、日志管理(日常维护)

1. 查看 binlog(主库)

-- 查看所有binlog文件 SHOW BINARY LOGS; -- 查看binlog内容(指定文件) SHOW BINLOG EVENTS IN 'mysql-bin.000001';

2. 查看 relay log(从库)

-- 查看relay log文件 SHOW RELAYLOG EVENTS IN 'mysql-relay-bin.000001';

3. 清理过期日志(避免磁盘满)

-- 主库清理binlog(保留7天) PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY); -- 从库清理relay log PURGE RELAY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);

七、常见日志相关故障排查

故障现象原因及解决方案Slave_IO_Running: No1. 主库IP/端口/账号密码错误;
2. 主库binlog文件/位置错误;
3. 主从server-id重复;
4. 主库3306端口未开放。Slave_SQL_Running: No1. 从库数据与主库不一致;
2. relay log 损坏(删除损坏的relay log,重新同步);
3. 从库执行了主库没有的操作。binlog 不生成主库未开启 log-binserver-id 未设置;重启主库后检查。relay log 持续增长从库 SQL 线程卡住,先修复 Slave_SQL_Running,再清理过期relay log。

到此这篇关于MySQL主从复制(日志核心)完整教程的文章就介绍到这了,

相关推荐

热文推荐