Mysql的主从复制,基于position的主从复制(二进制日志文件位置的复制)和基于gtid的主从复制

一、MySQL的下载流程

https://dev.mysql.com/downloads/mysql/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
二.实验环境
两台7版本的虚拟机+一台7版本的真机

主机信息 主机的功能
server1(172.25.254.1) 数据库的master节点
server2(172.25.254.2) 数据库的slave节点
真机(172.25.254.66) 测试
三、解压安装运行数据库
删除没有用的,最终只有5个rpm包
在这里插入图片描述
在这里插入图片描述
数据库安全初始化
安全初始化登陆的时候使用的是临时密码,接下来要自己设置数据库的密码
在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# mysql -uroot -paSD+1-3F=1*

在这里插入图片描述
在这里插入图片描述
server2安装MySQL数据库与server1相同操作

[root@server1 ~]# scp *.rpm server2:
The authenticity of host 'server2 (172.25.254.2)' can't be established.
ECDSA key fingerprint is SHA256:XDLC0AUVlscTbqrY4SGynWQkRJDKpxnFbco1duv+xFY.
ECDSA key fingerprint is MD5:3b:8e:96:dd:92:ff:e1:aa:db:eb:0c:51:00:62:22:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server2,172.25.254.2' (ECDSA) to the list of known hosts.
root@server2's password: 
mysql-community-client-5.7.28-1.el7.x86_64.rpm                                                                                                             100%   43MB  44.9MB/s   00:00    
mysql-community-common-5.7.28-1.el7.x86_64.rpm                                                                                                             100%  311KB  42.2MB/s   00:00    
mysql-community-libs-5.7.28-1.el7.x86_64.rpm                                                                                                               100% 4272KB  31.8MB/s   00:00    
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm                                                                                                        100% 1322KB  37.1MB/s   00:00    
mysql-community-server-5.7.28-1.el7.x86_64.rpm  

配置主从节点,启用复制
mysql的主从配置又叫replication,AB复制,基于binlog二进制日志,主数据库必须开启binlog二进制日志才能进行复制
主节点(master)写入数据,从节点(selave)复制
主从复制的要求:
(1)主库开启binlog日志(设置log-bin参数)
(2)主从server-id不同
(3)从库服务器能连同主库

[root@server1 ~]# vim /etc/my.cnf开始配置主节点数据库
最后面写入:
log-bin=mysql-bin  使用MySQL-bin日志
server-id=1(每个节点的序号是唯一的)
[root@server1 ~]# systemctl restart mysqld

在这里插入图片描述
创建用户并授权
master节点上设置(server1)

CREATE USER 'repl'@'172.25.12.%' IDENTIFIED BY 'Yan+123kou';创建用户,可以使用此用户远程登录数据库
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.25.12.%';授权为可以复制master节点数据的slave节点
flush privileges;刷新
show master status;查看master节点的状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

|REPLICATION|表示复制的权限|
|* .* |表示对所有库的所有表都授权|
|repl |用户名|
|‘172.25.12.%’ |授权172.25.12网段的所有数据库节点都可以同步(复制)|

server2主机上设置

[root@server2 ~]# vim /etc/my.cnf
[root@server2 ~]# systemctl restart mysqld

在这里插入图片描述
主机上测试master节点是否配置好

mysql -h 172.25.12.1 -urepl -pYan+123kou  登录数据库

看能否登录查看数据库(可以登录,但是没有查看的权限)
在这里插入图片描述
server2(slave节点)主机上面进行配置

设置mysql的主从复制:
mysql> CHANGE MASTER TO在这个slave节点上面设置管理它的master节点
    -> MASTER_HOST='172.25.254.1',主机信息--主库的ip地址
    -> MASTER_USER='repl',用户--主库的用户
    -> MASTER_PASSWORD='aSD+1-3F=1*',密码--主库用户的密码
    -> MASTER_LOG_FILE='mysql-bin.000001',基于position的主从复制的重要信息--主库的日志文件
    -> MASTER_LOG_POS=697;基于position的主从复制的重要信息--主库的状态码
start slave;开启本节点的slave--开启从库
show slave status\G;查看slave节点的状态

在这里插入图片描述
在这里插入图片描述

 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
可以看到的当前两个进程都是yes,表示主库和从库的数据一致
对于slave节点io线程和SQL线程是最重要的,
一个i/o线程,一个SQL线程,i/o线程去请求主库的binlog,sql线程进行日志回放来复制
只有当着两个线程开启,slave节点才能正常复制master的数据

在这里插入图片描述
master节点创建数据建立表格(server1)
在这里插入图片描述
在这里插入图片描述
在server2(slave节点上)查看数据是否同步
在这里插入图片描述
到此为止:异步复制(基于position的主从复制)已经完成,实验效果已经达到数据复制。

可以使用mysqlbinlog  mysql-bin.000001查看日志(/var/lib/mysql/日志存放地址)
日志内容都是每次操作的记录,每一步都要一个id号
基于position的主从复制容易因为master一个事件的中断而造成数据丢失而不能复制

主从复制不是复制数据库,而是复制操作即把在master节点的操作在slave节点重新执行一遍
三、Mysql的异步复制(基于gtid的主从复制)
什么是GTID?
1、全局唯一,一个事务对应一个GTID
2、替代传统的binlog+pos复制;使用master_auto_position=1自动匹配GTID断点进行复制
3、MySQL5.6开始支持
4、在传统的主从复制中,slave端不用开启binlog;但是在GTID主从复制中,必须开启binlog
5、slave端在接受master的binlog时,会校验GTID值
6、为了保证主从数据的一致性,多线程同时执行一个GTID
开启GTID,无需找到binlog和POS点,直接change master to master_auto_postion=1即可,它会自动寻找同步
GTID工作流程
在master上一个事务提交,并写入binlog里。
binlog日志发送到slave,slave接收并写入中继日志里,slave读取到这个GTID,并设置gtid_next的值。例如
set @@session。gtid_next=’=fbd841f9-5590-11e8-b819-000c29e6461e’;
然后告诉slave接下来的事务必须使用GTID,并写入它自己的binlog里。
slave检查并确认这个GTID没有被使用,如果没有被使用,那么开始执行这个事务并写入自己的binlog里
由于gtid_next的值不为空,slave不会尝试去生成一个新的gtid而是通过主从同步来获取GTID
实验环境

基于position的主从复制的基础上进行实验操作
基于gtid的主从复制不容易因为master一个事件的中断而造成数据丢失而不能复制

开启gtid的信息

vim /etc/my.cnf
systemctl restart mysqld

在这里插入图片描述
在这里插入图片描述
在server2上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server1上创建三个用户
在这里插入图片描述
server2上查看复制的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值