博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL5.7.23实现Gtid主从复制
阅读量:2347 次
发布时间:2019-05-10

本文共 3010 字,大约阅读时间需要 10 分钟。

前言

1)Gtid的概念

全局事务标识:global transaction identifiers
GTID是一个事务一一对应,并且全局唯一ID
GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或主从不一致
GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制。
MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
在传统的slave端,binlog是不用开启的,但是在GTID中slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。
2)Gtid的组成
uuid和事务id
3)Gtid优势
更简单的实现failover,不用以前那样在需要找log_file和log_pos。
更简单的搭建主从复制。
比传统的复制更加安全。
GTID是连续的没有空洞的,保证数据的一致性,零丢失。
4)Gtid的工作原理
1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
2、binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog,在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

一、环境

主机名 OS IP
MASTER centos7.5 192.168.182.164
SLAVE centos7.5 192.168.182.163

二、配置my.cnf

1)master

[root@master opt]# cat /etc/my.cnf 

[mysqld]
user = mysql
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysql.err
pid-file = /usr/local/mysql/data/mysqld.pid
server_id=1  //主服务器id
gtid_mode=on   //开启gtid模式
enforce_gtid_consistency=on  //强制gtid一致性,开启后对于特定create table不被支持
log-bin=mysql-bin
log-slave-updates=1    
binlog_format=row        //强烈建议,其他格式可能导致数据不一致
skip_slave_start=1
[client]
socket = /usr/local/mysql/mysql.sock
[root@master opt]# 
2)slave

[root@slave data]# cat /etc/my.cnf 

[mysqld]
user = mysql
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysql.err
pid-file = /usr/local/mysql/data/mysqld.pid
server_id=2
gtid_mode=on
enforce_gtid_consistency=on
log-bin=mysql-bin
log-slave-updates=1
binlog_format=row
skip_slave_start=1
[client]
socket = /usr/local/mysql/mysql.sock
[root@slave data]# 
三、配置主从库

1)master

mysql>grant replication slave on *.* to 'masterrep'@'192.168.182.%' identified by '123.com'; 

mysql>flush privileges;mysqldump -uroot -p'123.com' -B -A -F --set-gtid-purged=OFF  --master-data=2 --single-transaction  --events | gzip >/opt/juwo_$(date +%F).sql.gz

mysql> flush tables with read lock;   //此锁表的终端必须在备份完成以后才能退出(退出锁表失效)

2)slave

mysql>mysql -uroot -p'123.com' -e "source /root/juwo_$(date +%F).sql"

mysql>changemastertomaster_host='192.168.182.164',master_port=3306,master_user='masterrep',master_password='123.com',master_auto_position=1;
mysql>start slave;
mysql>show slave status\G;

*********************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.182.164
                  Master_User: masterrep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 194
               Relay_Log_File: relay-bin.000004
                Relay_Log_Pos: 407
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
注:IO和SQL都为yes,说明成功了

 

转载地址:http://lzxvb.baihongyu.com/

你可能感兴趣的文章
Spring Cloud 声明式服务调用 Feign
查看>>
JVM实用参数(一)JVM类型以及编译器模式
查看>>
spring cloud config 属性加解密
查看>>
rabbitmq安装
查看>>
RabbitMQ 使用
查看>>
动态代理
查看>>
oracle中merge into用法解析
查看>>
MySQL Explain详解
查看>>
oracle性能监控
查看>>
Spring Boot 整合Servlet
查看>>
Spring Boot 整合Filter
查看>>
nginx 安装
查看>>
ngnix 详解
查看>>
IDEA创建spring boot项目
查看>>
IDEA安装插件
查看>>
HttpClient-02连接管理
查看>>
数据库连接池-配置 wallfilter问题解决-UncategorizedSQLException
查看>>
java根据文件流判断文件类型(后缀名)
查看>>
js常用操作事件
查看>>
linux 安装mysql
查看>>