MySQL的主从复制

发布于:2024-04-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

概述

主从复制是指将主数据库的DDL 和DML操作通过二进制日志传到从库服务器中,然后再从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。

优点

  • 主库出现问题,可以快速切换到从库提供服务
  • 实现读写分离,降低主库的访问压力
  • 可以再从库中执行备份,以避免备份期间隐形阿根主库服务

原理

在这里插入图片描述

  1. 主数据库(Master):主数据库是被复制的源头,负责接收应用程序的写操作(INSERT、UPDATE、DELETE等),并记录这些操作到自身的binlog(二进制日志)中。binlog记录了所有数据库的变更操作,以二进制的形式存储。
  2. 从数据库(Slave):从数据库是复制的目标,它会连接到主数据库,并请求主数据库的binlog。从数据库将主数据库的binlog复制到自己的relay log(中继日志)中,然后执行relay log中的操作,从而实现与主数据库的数据同步。
  3. 主从复制过程
    • 主数据库将写操作记录到binlog中。
    • 从数据库连接到主数据库,并请求binlog中的数据。
    • 主数据库将binlog中的数据传输给从数据库。
    • 从数据库将binlog中的数据写入到自己的relay log中。
    • 从数据库执行relay log中的操作,将改变反映他自己的数据,使自己的数据与主数据库保持同步。

搭建

服务器准备

开放指定的3306端口号:
firewall-cmd --zone=public --add-port=2206/tcp -permanent
firewall0cmd -reload

关闭服务器的防火墙
systemctl stop firewalld
systemctl disable firewalld

主库配置

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

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^23-1,默认为1
server-id=1
#是否只读,1代表只读,0代表读写
read-only=0
#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

2.重启MySQL服务器

systemctl restart mysqld

3.登录msyql,创建远程连接的账号,并授予主从复制权限

#创建itcast用户,并设置密码,该用户可以再任意主机连接该MySQL服务
CREATE USER 'itcast'@'%'IDENTIFIED WITH mysql_native_password BY 'Root@123456';
#为'itcast'@'%'用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

4.通过指令,查看二进制日志坐标

show master status;

字段含义说明:

file:从哪个日志文件开始推送日志文件

position:从哪个位置开始推送日志

binlog_ignore_db:指定不需要同步的数据库

从库配置

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

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^23-1,和主库不一样既可
server-id=2
#是否只读,1代表只读,0代表读写
read-only=1

2.重新启动MySQL服务

systemctl restart mysqld

3.登录MySQL,设置主库配置

CHANGE REPLICATION SOURCE TO SOURCE_HOST='XXX.XXX',SOURECE_USER='XXX',SOURCE_PASSWORD='XXX',SOURCE_LOG_FILE='XXX',SOURCE_LOG_POS=XXX;

上述是8.0.23中的语法。如果是msyql是8.0.23之前的版本,执行如下SQL:

CHANGE MASTER TO MASTER_HOST='XXX.XXX.XXX.XXX',MASTER_USER='XXX',MASTER_PASSWORD='XXX',MASTER_LOG_FILE='XXX',MASTER_LOG_POS=XXX;
参数名 含义
SOURCE_HOST 主库IP地址
SOURCE_USER 连接主库的用户名
SOURCE_PASSWORD 链接主库的密码
SOURCE_LOG_FILE binlog日志文件名
SOURCE_LOG_POS binlog日志文件位置

4.开启同步操作

start replica; #8.0.22之后
start slave;   #8.0.22之前

5.查看主从同步的装填

show replica status;


show slave status;

在这里插入图片描述