MySQL 8.0.36 主从复制完整实验

一、环境准备

主从复制的前提是确保基础环境一致且网络互通,以下是本次实操的环境信息及前置要求。

1.1 环境说明

主机名 ip地址 操作系统 mysql版本
master 192.168.194.163 rhel9.4 yum安装mysql8.0.36
rep1 192.168.194.164 rhel9.4 yum安装mysql8.0.36

1.2 前置条件说明(生产必看)

在开始配置前,需确保以下条件已满足,否则可能导致复制失败:

MySQL 已正常安装 :主从库均已完成 MySQL 8.0.36 源码安装,且能通过/etc/init.d/mysqld start正常启动(源码安装需提前配置好服务脚本)。
网络互通 :主库与从库之间能 ping 通,且主库已开放 3306 端口(MySQL 默认端口),关闭安全组件,或者开放3306端口。
时间同步:主从库时间需一致(误差建议≤1 秒),否则会导致 binlog 时间戳异常,影响复制。

二、主库master配置步骤

主库的核心作用是记录二进制日志(binlog),并允许从库通过复制账号读取 binlog。以下是完整配置流程:

**2.1 配置 MySQL 主配置文件 **(/etc/my.cnf.d/mysql-server.cnf或/etc/my.cnf)

MySQL 的主从复制依赖my.cnf(主配置文件)中的关键参数,需编辑该文件启用 binlog 并设置唯一标识:

bash 复制代码
[root@master ~]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
# MySQL数据存储目录
datadir=/var/lib/mysql
# MySQL socket文件路径,用于本地进程通信
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
# 主库唯一标识 
server_id=163
# 启用二进制日志(主从复制核心,日志文件前缀为binlog,文件会生成在datadir目录下)
log-bin=binlog

# 修改my.cnf后需重启 MySQL 服务
[root@master ~]# systemctl restart mysqld
# 登录MySQL,验证server_id是否为163(主库配置值)
[root@master ~]# mysql -uroot -p -e"select @@server_id;"
Enter password: 
+-------------+
| @@server_id |
+-------------+
|         163 |
+-------------+

2.2 创建复制专用账号并授权

从库需通过一个专用账号连接主库读取 binlog,该账号只需replication slave权限(最小权限原则,提升安全性):

sql 复制代码
[root@master ~]# mysql -uroot -p123
# 创建复制账号rep,允许从任何IP连接(%表示所有IP,生产建议限定从库IP,如'192.168.2.104')
mysql> create user 'rep'@'%' identified  by 'rep123';
# 授予rep账号复制权限(replication slave是复制必需的最小权限)
mysql> grant  replication slave on *.* to 'rep'@'%';
# 查看权限
mysql>  show grants for 'rep'@'%';
+---------------------------------------------+
| Grants for rep@%                            |
+---------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `rep`@`%` |
+---------------------------------------------+

2.3 (可选) 锁定主库表,防止数据变更

全量备份主库数据前,需锁定所有表(仅允许读,禁止写),避免备份过程中数据不一致:

sql 复制代码
#为后面备份准备,注意生产环境要提前申请停机时间;
mysql> flush tables with read lock;
#提示:如果超过设置时间不操作会自动解锁。
mysql> show variables like '%timeout%';

2.4 查看主库 binlog 状态

sql 复制代码
#查看主库状态,即当前日志文件名和二进制日志偏移量
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000003 |     1210 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

2.5 (可选) 备份主数据库中数据

sql 复制代码
mysqldump -uroot -p -A -B |gzip > /server/backup/mysql_bak.$(date +%F).sql.gz

2.6 (可选) 解锁

sql 复制代码
mysql> unlock tables;

2.7 (可选)主库备份数据上传到从库

sql 复制代码
scp  /server/backup/mysql_bak.2025-08-07.sql.gz 192.168.194.164:/server/backup

三、从库rep1配置步骤

从库需设置唯一的server_id(与主库不同),若后续需搭建 "级联复制"(从库作为其他从库的主库),可启用 binlog(本文仅需基础主从,启用 binlog 更灵活):
3.1 配置 MySQL 配置文件

bash 复制代码
[root@rep1 mysql]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
# MySQL数据存储目录
datadir=/var/lib/mysql
# MySQL socket文件路径,用于本地进程通信
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
# 主库唯一标识 
server_id=164

[root@rep1 ~]# systemctl restart mysqld
[root@rep1 ~]# mysql -uroot -p -e"select @@server_id;"

3.2 (可选)解压备份文件并恢复从库数据

将主库的全量备份文件解压,然后恢复到从库,确保从库初始数据与主库一致:

bash 复制代码
[root@rep1 backup]# ls
mysql_bak.2025-09-03.sql.gz
[root@rep1 backup]# gzip -d mysql_bak.2025-09-03.sql.gz 
# 恢复数据到从库(通过mysql命令执行备份SQL)
[root@rep1 backup]# mysql -uroot -p123 < mysql_bak.2025-09-03.sql 
[root@rep1 backup]# mysql -uroot -p -e 'show databases;'

3.3 配置从库复制参数

在从库 MySQL 中执行change master to命令,配置主库信息(含主库 IP、复制账号、binlog 文件名及位置),建立主从关联:

sql 复制代码
mysql> CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.194.163',
SOURCE_USER='rep',
SOURCE_PASSWORD='rep123',
SOURCE_LOG_FILE='binlog.000003',
SOURCE_LOG_POS=1210,
SOURCE_SSL=1; 

# 启动从库同步开关
mysql> start replica;

3.4 检查状态

sql 复制代码
mysql> show replica status\G
Slave_IO_Running: Yes    #IO线程是否打开
Slave_SQL_Running: Yes   #SQL线程是否打开

四、MySQL主从复制的状况监测

sql 复制代码
#在主库上查看该主库有多少从库
mysql> show replicas;
+-----------+------+------+-----------+--------------------------------------+
| Server_Id | Host | Port | Source_Id | Replica_UUID                         |
+-----------+------+------+-----------+--------------------------------------+
|       129 |      | 3306 |       200 | 5600a85a-72ee-11f0-9706-000c29f34354 |
+-----------+------+------+-----------+--------------------------------------+

#主库创建一个数据库
[root@master ~]# mysql -uroot -p -e 'create database test1;'

#在从库可以看到主库同步过来的数据库
[root@rep1 mysql]# mysql -uroot -p -e 'show databases;'
Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
相关推荐
码域空间38 分钟前
锁住了检查,锁不住延迟——MySQL 读写分离架构下双重检查模式失效实录
数据库·mysql·架构
数据库小学妹2 小时前
MySQL 8.4还是9.7 LTS?8.0 EOL后升级怎么选
数据库·mysql·dba·版本升级·数据库运维
m0_547486662 小时前
《数据库原理及应用教程MySQL 8.0》全套PPT课件2026
数据库·mysql
程序员夏洛2 小时前
MySQL 中的事务隔离级别有哪些?
数据库·mysql
冰暮流星2 小时前
mysql之字符串函数
数据库·mysql
梦想不只是梦与想4 小时前
MySQL 不同操作系统的安装方式
数据库·mysql·mysql安装
码农颜4 小时前
6.4.1 监听连接
java·数据库·mysql
菀亓1 天前
ubuntu系统mysql安装
mysql
程序员贺加贝1 天前
别被 saveBatch 骗了:一次 MyBatis-Plus 批量插入性能排查
mysql
l1258651 天前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus