MySQL 主从复制

1、概念介绍

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

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

MySQL 主从复制_第1张图片

MySQL复制的有点主要包含以下三个方面:

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

MySQL的主从复制原理:

  • Master主库在事务提交时,会把数据变更记录在二进制日志文件Binlog 中。
  • 从库读取主库的二进制日志文件Binlog,写入到从库的中继日志Relay Log 。
  • slave重做中继日志中的事件,将改变反映它自己的数据。

MySQL 主从复制_第2张图片

2、主库配置
a. 配置防火墙
# 开放指定的3306端口号(生产环境):
firewall-cmd--zone=public --add-port=3306/tcp -permanent
firewall-cmd -reload

# 关闭服务器的防火墙(本次采用关闭防火墙):
systemctl stop firewalld
systemctl disable firewalld
b. 修改 /etc/my.cnf
# mysql服务ID,保证整个集群环竟中唯一,取值范围:1 - 2^32 - 1,默认为1
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0
# 设置二进制日志文件
log_bin=binlog

#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01


# 重启服务
systemctl restart mysqld
c. 创建用户、赋予权限

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

-- 创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';

-- 为‘itcast'@'%'用户分配主从复制权限
grant replication slave on *.* to 'itcast'@'%';
d. 查看二进制日志坐标
show master status;

MySQL 主从复制_第3张图片

字段含义说明:

  • file:从哪个日志文件开始推送日志文件
  • position : 从哪个位置开始推送日志
  • binlog_ignore_db :指定不需要同步的数据库
3、从库配置
a. 配置防火墙
# 开放指定的3306端口号(生产环境):
firewall-cmd--zone=public --add-port=3306/tcp -permanent
firewall-cmd -reload

# 关闭服务器的防火墙(本次采用关闭防火墙):
systemctl stop firewalld
systemctl disable firewalld
b. 修改 /etc/my.cnf
# 保证整个集群环竟中唯一,取值范围:1 - 2^32 - 1,和主库不相同
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1


# 重启服务
systemctl restart mariadb
c. 登录mysql,设置主库配置
-- mysql 8.0.26 以后
change replication source to source_host='192.168.137.252',source_user='test1',source_password='123456',source_log_file='binlog.000001',source_log_pos=245;
-- mysql 8.0.26 之前
change master to master_host='192.168.137.252',master_user='test1',master_password='123456',master_log_file='binlog.000001',master_log_pos=245;

MySQL 主从复制_第4张图片

d. 开启同步操作
#8.0.22之后
start replica;

#8.0.22之前
start slave;


-- 查看主从同步状态
show replica status; 	-- 8.0.22之后
show slave status; 		-- 8.0.22之前

MySQL 主从复制_第5张图片

测试:在主数据库创建数据,在从库中查询数据,验证主从是否同步。

你可能感兴趣的:(MySQL,mysql,数据库)