MySQL 8.0 主从复制详解与实践

MySQL 8.0 主从复制详解与实践

1. 简介

MySQL 8.0 提供了强大的主从复制功能,允许将数据从一个服务器同步到另一个服务器,以实现数据备份、高可用性和读写分离等优势。本文将深入探讨 MySQL 8.0 主从复制的原理、配置和实践,带你一步步实现主从复制的设置。

2. 什么是主从复制?

基本概念

数据库主从复制基于主从关系,其中一个数据库被定义为主数据库(Master),而另一个被定义为从数据库(Slave)。主数据库负责接收和记录所有的数据变更操作,包括插入、更新和删除。从数据库则通过复制主数据库的变更日志来保持数据的同步。

作用和优势:

  • 灾备: 主从复制允许将主数据库的数据实时复制到从数据库中,这样在主数据库发生故障时,可以快速切换到从数据库以继续提供服务,从而实现高可用性和灾难恢复。

  • 读写分离:主从复制使得从数据库可以用于处理只读查询,分担主数据库的负荷。这提高了系统的性能和响应速度,尤其在高并发情况下。

  • 数据分析和报表生成: 从数据库可以用于执行复杂的数据分析和报表生成操作,而不影响主数据库的性能,从而优化了业务流程。

  • 分布式数据部署: 主从复制可以用于在不同地理位置部署数据库,从而实现数据在不同地区的复制和同步。

  • 升级和测试: 通过将主数据库升级或者测试新功能,从数据库可以继续提供服务,从而不影响线上环境。

应用场景

  • 电子商务平台: 在电商平台中,主从复制可以用于实现读写分离,提高并发处理能力,同时确保数据的一致性。
  • 社交网络: 在社交网络应用中,可以利用主从复制来提供快速的读取服务,同时将数据变更复制到从数据库以备份数据。
  • 实时监控和报警系统: 在监控系统中,主从复制可以用于实现数据的分布式存储和快速数据查询。
  • 新闻和媒体网站: 在高访问量的新闻网站中,可以使用主从复制来提供高可用性和快速的内容访问。
  • 金融服务: 在金融行业,数据的安全性和可用性至关重要,主从复制可以用于数据备份和高可用性的实现。

3. 主从复制的原理

  • 当主库在事务提交时,会将数据的变更记录在二进制日志文件(Binlog)中。
  • 从库会读取主库的二进制日志文件,并将其写入中继日志(Relay Log)中。
  • 从库会重新执行中继日志中的事件,从而反映出自己的数据的变化。

4. 环境准备和配置

两台装有 MySQL 的服务器

  • 主: 192.168.64.4
  • 从: 192.168.64.5

开放 3306 端口

5. 主从库配置

5.1 主库配置

修改配置文件 /etc/my.cnf

1
2
3
4
5
6
7
8
9
10
11
#mysql 服务1D,保证整个集群环境中唯一,取值范围:1-232-1,默认为1
server-id=1

# 是否只读, 1 代表只读,0代表读写
read-only=0

#忽略的数据,指不需要同步的数据库
#inlog-ignore-db=mysql

#指定同步的数据库
#binlog-do-db=dbo1

主库创建数据同步的用户并授权

1
2
3
4
CREATE USER 'master'@'192.168.64.5' IDENTIFIED WITH mysql_native_password BY 'Root@1998';
GRANT REPLICATION SLAVE ON *.* TO 'master'@'192.168.64.5';
# 记得刷一下权限
FLUSH PRIVILEGES;
1
2
3
4
5
6
7
8
# 查看主库同步日志状态
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000006 | 1951 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
  • File 这里对应下述的 SOURCE_LOG_FILE
  • Position 这里对应下述的 SOURCE_LOG_POS

5.2 从库配置

修改配置文件 /etc/my.cnf

1
2
server-id=2
read-only=1

设置主库地址以及同步地址

1
2
3
4
5
6
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.64.4',
SOURCE_USER='master',
SOURCE_PASSWORD='Root@1998',
SOURCE_LOG_FILE='binlog.000006',
SOURCE_PORT=3306,
SOURCE_LOG_POS=1419;

执行开启从库复制

1
start slave;

查看从库配置状态

1
show slave status\G;

image-20230811162637290

这两项要为 yes.


MySQL 8.0 主从复制详解与实践
https://cuifuan.github.io/2023/04/01/database/mysql-master-slave/
作者
cuifuan
发布于
2023年4月1日
许可协议