概述
主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库对这些日志重新执行(也叫重做),从而是的从库和主库数据保持同步。
mysql也支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链装复制。
如果需要开启慢查询日志,需要在MySQL的配置文件 /etc/my.cnf 中配置如下参数:
mysql 复制的优点注意包含以下三点:
- 主库出现问题,可以快速切换到从库提供服务
- 实现读写分离,降低主库的访问压力
- 可以在从库执行备份,以避免备份期间影响主库服务
原理
mysql主从复制的核心就是 二进制日志 具体过程如下:
从上图来看,复制分成三步:
- master主库在事务提交时,会把数据变更记录在二进制日志文件 binlog中。
- 从库读取主库的二进制文件binlog,写入到从库的中继日志 relay log。
- slave 重做中继日志事件,将改变反映它自己的数据。
注意:这里面有两个线程:iothread 和sqlthread
iothread线程是:在主库的二进制binlog日志有变更的时候,就会读取到从库,然后写入到中继日志relay log中
sqlthread线程是:是当中继日志有变更的时候,会读取,然后把记录的命令在从库执行一次。
搭建
搭建准备:在两台服务器上都部署mysql服务,保证mysql正常,部署mysql可以参考之前的文章
192.168.55.105 (master) |
开放3306端口 命令: firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd -reload |
192.168.55.104 (slave) |
我这里是直接关闭了服务器的防火墙:
关闭防火墙: systemctl stop firewalld 关闭开机自启: systemctl disable firewalld
主库配置:
1.修改配置文件:/etc/my.cnf
#mysql 服务ID 保证整个集群环境中唯一,取值范围:1 - 2的32次幂减1 默认为1 server-id=1 #是否只读,代表只读:1 代表读写:0 read-only=0 #忽略的数据,指不需要同步的数据库 #binlog-ignore-db=mysql #指定同步的数据库 #binlog-do-db=db01
2. 重启mysql服务器,使配置生效
systemctl restart mysqld
没有报错,代表配置成功
3.登录mysql,创建远程连接的账号,并授予主从复制的权限
#创建test用户,并设置密码,该用户可在任意主机连接该MySQL服务 create user 'test'@'%' identified with mysql_native_password by 'Root@123456'; #为 'test'@'%' 用户分配主从复制权限 grant replication slave on *.* to 'test'@'%';
4.通过指令,查看二进制日志坐标
show master status;
字段说明:
- file:从哪个二进制日志开始推送日志
- position : 从哪个位置开始推送日志
- binlog_ignore_db: 指定不需要同步的数据库
从库配置
1.修改配置文件:/etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可 server-id=2 #是否只读,1 代表只读, 0 代表读写 read-only=1
2.重启mysql服务
systemctl restart mysqld
3.登录mysql 设置主库配置
mysql 8.0.23之后的语法:
change replication source to source_host='192.168.55.105',source_user='test',source_password='Root@123456',source_log_file='binlog.000008',source_log_pos=659;
如果是mysql8.0.23之前的版本,执行如下sql:
change master to master_host='192.168.55.105',master_user='test',master_password='Root@123456',master_log_file='binlog.000008',naster_log_pos=659;
参数名 | 含义 | 8.0.23之前 |
source_host | 主库IP地址 | master_host |
source_user | 连接主库的用户名 | master_user |
source_password | 连接主库密码 | master_password |
source_log_fie | binlog日志文件名 | master_log_file |
source_log_pos | binlog日志文件位置 | master_log_pos |
4. 开启同步操作
8.0.23之后版本 start replica; 8.0.23之前版本 start slave;
5.查看主从同步状态
show replica status ; #8.0.22之后 show slave status ; #8.0.22之前
重点看Replica_IO_Running 和 Replica_SQL_Running 都必须是yes
测试
1,.在主库192.168.55.105创建数据库,表,并插入数据
create database db01; use db01; create table tb_user( id int(11) primary key not null auto_increment, name varchar(50) not null, sex varchar(1) )engine=innodb default charset=utf8mb4; insert into tb_user(id,name,sex) values(null,'Tom', '1'),(null,'Trigger','0'),(null,'Dawn','1');
主库
从库:
标签:主库,主从复制,source,master,mysql,日志,从库 From: https://www.cnblogs.com/slx-yyds/p/17121359.html