当前位置: 首页 > news >正文

MySQL 8.0.36 主从复制完整实验

一、环境准备

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

1.1 环境说明

主机名ip地址操作系统mysql版本
master192.168.194.163rhel9.4yum安装mysql8.0.36
rep1192.168.194.164rhel9.4yum安装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 并设置唯一标识:

[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权限(最小权限原则,提升安全性):

[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 (可选) 锁定主库表,防止数据变更
全量备份主库数据前,需锁定所有表(仅允许读,禁止写),避免备份过程中数据不一致:

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

2.4 查看主库 binlog 状态

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

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

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

2.6 (可选) 解锁

mysql> unlock tables;

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

scp  /server/backup/mysql_bak.2025-08-07.sql.gz 192.168.194.164:/server/backup

三、从库rep1配置步骤

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

[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 (可选)解压备份文件并恢复从库数据
将主库的全量备份文件解压,然后恢复到从库,确保从库初始数据与主库一致:

[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 文件名及位置),建立主从关联:

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 检查状态

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

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

#在主库上查看该主库有多少从库
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              |
+--------------------+
http://www.xdnf.cn/news/1470223.html

相关文章:

  • S32K3平台ADC 应用说明
  • 无人机RTK模块技术要点与难点
  • GEO排名优化:迈向个性化与语义化搜索时代的智能策略
  • VMwaer虚拟机安装完Centos后无法联网问题
  • SQL时间过滤神器:DATE_SUB+between实战指南,告别硬编码日期!
  • React 组件基础与事件处理
  • 04 - 【HTML】- 常用标签(下篇)
  • Windows环境下实现GitLab与Gitee仓库代码提交隔离
  • 今天一天三面,明天加油DW!!!
  • Linux文件描述符详解
  • baml:为提示工程注入工程化能力的Rust类型安全AI框架详解
  • 【完整源码+数据集+部署教程】广告牌实例分割系统源码和数据集:改进yolo11-dysample
  • MySQL数据库备份攻略:从Docker到本地部署
  • JAiRouter 0.7.0 发布:一键开启 OpenTelemetry 分布式追踪,链路性能全掌握
  • 环境搭建与你的第一个 Next.js 应用
  • 嵌入式单片机---串口通信及相关通信技术
  • PPIO上线kimi-k2-0905,编码能力大幅提升
  • 阿里云ESA 没有数据发送到SLS的解决
  • Linux调试命令速查:Java/微服务必备
  • 代码版本控制
  • C++ 异常
  • android嵌入式开发入门
  • GD32入门到实战34--ARM启动流程
  • 大模型——剪枝、量化、蒸馏、二值化
  • 一招快速识别你的电脑是机械硬盘还是固态硬盘
  • 笔记三 FreeRTOS中断
  • 虚拟机详细图文教程系列15、Linux虚拟机Centos8系统部署禅道开源项目
  • 如何修改drawio中的线条样式(将实线变为虚线)
  • unsloth笔记:基本介绍
  • SAP官方授权供应商名单2025