概述
主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
mysql支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。
主库(master)
从库(slave)
mysql复制的优点主要包括:
- 主库出现问题,可以快速切换到从库提供服务
- 实现读写分离,降低主库的访问压力
- 可以在从库中执行备份,以避免备份期间影响主库服务
底层原理
二进制日志
搭建
主库配置
txt
#mysql服务id,保证整个集群环境中唯一,取值范围1-2^23-1,默认为1
server-id=1
#是否只读,1代表只读,0代表读写
read-only=0
# 忽略的数据,指不需要同步的数据库
# binlog-ignore-db=mysql
#指定同步的数据库
# binlog-do-db=db01
从库配置
sql
#创建用户,并设置密码,给用户可以在任意主机连接该mysql服务
create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';
#为'itcast'@'%'用户分配主从复制权限
grant replication slave on *.* to 'itcast'@'%';
查看二进制日志坐标
sql
show master status;
字段含义说明:
- file:从哪个日志文件开始推送日志文件
- position:从哪个位置开始推送日志
- binlog_ignore_db:指定不需要同步的数据库
从库配置
修改配置文件(/etc/my.cnf)
java
#mysql服务id,保证整个集群环境中唯一,取值范围1-2^23-1,默认为1
server-id=2
#是否只读,1代表只读,0代表读写
read-only=1
#超级管理员只读
super-read-only=1
修改配置文件后要重启生效
bash
systemctl restart mysqld
设置主库相关配置
mysql8.023之后配置
sql
change replication source to source_host='xxx.xxx'
,source_user='xxx'
,source_password='xxx'
,source_log_file='xxx'
,source_log_pos=xxx;
mysql8.023之前配置
sql
CHANGE MASTER TO
MASTER_HOST='xxx.xxx',
MASTER_USER='xxx',
MASTER_PASSWORD='xxx',
MASTER_LOG_FILE='xxx',
MASTER_LOG_POS=xxx;
开启同步操作
sql
start replica #8.0.22之后
start slave #8.0.22之前
查看从库状态
sql
show replica status;#8.0.22之后
show slave status;#8.0.22之前