前言
主从复制概述: 将主库的DDL 和DML 操作,写入二进制日志,并通过I/O线程读取到从库服务器中,通过sql线程这些日志重新执行,从而使得从库和主库的数据保持同步。
一、服务器准备
主从复制至少需要两台及以上的服务器,确保都配置了mysql并开启。
注意:需要关闭防火墙。
本文使用到的ip地址为:
- 主库:192.168.188.132
- 从库:192.168.188.130
二、主库配置
2.1 修改配置文件
vim /etc/my.cnf
进入文件后,添加如下配置:
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=1
#是否只读,1 代表只读, 0 代表读写
read-only=0
2.2 重启mysql服务器
systemctl restart mysqld
没有报错说明配置成功,如果报错一般是刚才写的配置文件的内容有问题,仔细检查。
2.3 登录mysql,创建账号,配置权限
登录后执行下列操作:
#创建master用户,并设置密码'Root@123456'(未调整数据库权限,此处设置的复杂一些),该用户可在任意主机连接该MySQL服务
CREATE USER 'master'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456' ;
#为 'master'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'master'@'%';
2.4 查看binlog的文件位置
此处的master为上一步创建的用户对象。在从库中需要用该出的File、Position数据。
- file : 从哪个日志文件开始推送日志文件
- position : 从哪个位置开始推送日志
- binlog_ignore_db : 指定不需要同步的数据库
到此,主库配置完成。
三、从库配置
3.1 修改配置文件
vim /etc/my.cnf 进入从库的配置文件。
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=1
3.2 重新mysql服务
systemctl restart mysqld
3.3 登录mysql,设置主库配置
根据自己的主机配置, SOURCE_HOST:主库的ip地址。 SOURCE_USER:主库创建的用户名。 SOURCE_PASSWORD:主库创建的用户名密码。 SOURCE_LOG_FILE:主库binlog文件的位置。 SOURCE_LOG_POS:主库binlog文件中的偏移量。
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.188.132', SOURCE_USER='master', SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000026', SOURCE_LOG_POS=663;
如果mysql是 8.0.23 之前的版本,执行如下SQL:
CHANGE MASTER TO MASTER_HOST='192.168.188.132', MASTER_USER='master', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000026', MASTER_LOG_POS=663;
执行结果如下:
3.4 开启同步操作
start replica ;
start slave ;
3.5 查看主从同步状态
show replica status ;
show slave status ;
四、测试
1 在主库 192.168.188.132上创建数据库、表,并插入数据(DML语句)。
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,'zhangsan', '1'),(null,'lisi','0'), (null,'wangwu','1');
主库的表 2. 在从库 192.168.188.130 中查询数据,验证主从是否同步。 使用use db01进入该库中可见,数据也在其中。
|