mysql主从复制
一、概述
将主库的数据变更同步到从库,从而保证主库和从库数据一直。
主要功能:数据备份、失败迁移、读写分离、降低单库读写压力
二、原理
1. 主库会把数据变更记录在二进制日志文件Binlog中。
2. 从库连接主库,读取Binlog日志,并写入自身中继日志relaylog。
3. slave重做中继日志,将改变反映她自己的数据。
三、搭建
准备服务器
搭建两台mysql服务器,参照(https://www.cnblogs.com/xiaodunan/p/17381181.html)
配置主库
- 修改配置文件/etc/my.cnf
vim /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
- 启动MySQL服务器
systemctl restart mysql
- 登录mysql,创建远程连接的账号,并授予主从复制权限
mysql -uroot -p
#创建xdn用户,并设置密码,该用户可在任意主机连接该MySQL服务
create user 'xdn'@'%' identified with mysql_native_password by 'xiaodunan123';
#为'xdn'@'%'用户分配主从复制权限,'*.*'表示'所有库.所有表'
grant replication slave on *.* to 'xdn'@'%';
- 通过指令,查看二进制日志坐标
show master status;
字段含义说明:
file:从哪个日志文件开始推送日志文件
position: 从哪个位置开始推送日志
binlog_ignore_db:指定不需要同步的数据库
配置从库
- 修改配置文件/etc/my.cnf
#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^32-1,默认为1
server-id=2
#是否只读,1代表只读,0代表读写
read-only=1
- 重新启动MySQL服务
systemctl restart mysql
- 登录mysql,设置 主库配置
mysql -uroot -p
change replication source to source_host='192.168.206.134',source_user='xdn',source_password='xiaodunan123',source_log_file='binlog.000004',source_log_pos=650;
上述是8.0.23中的语法,如果mysql是8.0.23之前的版本,执行如下SQL:
change master to master_host='192.168.206.134',master_user='xdn',master_password='xiaodunan123',master_log_file='binlog.000004',master_log_pos=650;
参数名 | 含义 | 8.0.23之前 |
---|---|---|
source_host | 主库IP地址 | master_hsot |
source_user | 连接主库的用户名 | master_user |
source_password | 连接主库的密码 | master_password |
source_log_file | binlog日志文件名 | master_log_file |
source_log_pos | binlog日志文件位置 | master_log_pos |
- 开启同步操作
start replica; #8.0.22之后
start slave; #8.0.22之前
测试
- 在主库上创建数据库,表,并插入数据
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,'xdn','1'),(null,'zjx','0');
- 在主库和从库中分别查看表,可以看到从库已从主库同步到了数据
show tables;
select * from tb_user;