主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。
MySQL复制的有点主要包含以下三个方面:
MySQL的主从复制原理:
# 开放指定的3306端口号(生产环境):
firewall-cmd--zone=public --add-port=3306/tcp -permanent
firewall-cmd -reload
# 关闭服务器的防火墙(本次采用关闭防火墙):
systemctl stop firewalld
systemctl disable firewalld
# 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
登录mysql,创建远程连接的账号,并授予主从复制权限
-- 创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';
-- 为‘itcast'@'%'用户分配主从复制权限
grant replication slave on *.* to 'itcast'@'%';
show master status;
字段含义说明:
# 开放指定的3306端口号(生产环境):
firewall-cmd--zone=public --add-port=3306/tcp -permanent
firewall-cmd -reload
# 关闭服务器的防火墙(本次采用关闭防火墙):
systemctl stop firewalld
systemctl disable firewalld
# 保证整个集群环竟中唯一,取值范围:1 - 2^32 - 1,和主库不相同
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1
# 重启服务
systemctl restart mariadb
-- 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;
#8.0.22之后
start replica;
#8.0.22之前
start slave;
-- 查看主从同步状态
show replica status; -- 8.0.22之后
show slave status; -- 8.0.22之前
测试:在主数据库创建数据,在从库中查询数据,验证主从是否同步。