关键词:
MySQL主从复制之基于GTIDs的AB复制架构(在线热备)
基于GTIDs的AB复制架构(M-S)
GTIDs概述
什么是GTIDs以及有什么特点?
-
GTIDs(Global transaction identifiers)全局事务标识符,是mysql 5.6新加入的一项技术
-
当使用GTIDs时,每一个事务都可以被识别并且跟踪
-
添加新的slave或者当发生故障需要将master身份或者角色迁移到slave上时,都无需考虑是哪一个二进制日志以及哪个position值,极大简化了相关操作
-
GTIDs是完全基于事务的,因此不支持MYISAM存储引擎
-
GTID由source_id和transaction_id组成:
1)source_id来自于server_uuid,可以在auto.cnf中看到
2)transation_id是一个序列数字,自动生成.
使用GTIDs的限制条件有哪些?
-
不支持非事务引擎(MyISAM),因为可能会导致多个gtid分配给同一个事务
-
create table … select 语句不支持(主库语法报错)
-
create/drop temporary table 语句不支持
-
必须使用enforce-gtid-consistency参数
-
sql-slave-skip-counter不支持(传统的跳过错误方式)
-
GTID复制环境中必须要求统一开启和GTID或者关闭GTID
-
在mysql 5.6.7之前,使用mysql_upgrade命令会出现问题
基于GTIDs的主从复制
在生产环境中,大多数情况下使用的MySQL5.6基本上都是从5.5或者更低的版本升级而来,这就意味着之前的mysql replication方案是基于传统的方式部署,并且已经在运行,因此,接下来我们就利用已有的环境升级至基于GITDs的Replication
〇 思路
- 修改配置文件支持GTIDs (主+从)
- 重启数据库 (主+从)
- 为了保证数据一致性,master和slave设置为只读模式 (主+从)
- 从服务器上重新配置同步 (从)
第一步:修改配置文件支持GTIDs
在 MySQL数据库在线热备(主从复制之AB复制) 的基础上修改一下他的配置文件就行
修改配置前服务器需要关闭MySQL服务,前面操作基本和AB复制的操作一样,只是配置文件不一样,还有就是复制到slave 服务器的日志文件需要删除
说明:
-
开启GITDs需要在master和slave上都配置gtid-mode,log-bin,log-slave-updates,enforce-gtid-consistency(该参数在5.6.9之前是–disable-gtid-unsafe-statement)
-
其次,slave还需要增加skip-slave-start参数,目的是启动的时候,先不要把slave起来,需要做一些配置
-
基于GTIDs复制,slave 服务器必须开启二进制日志!
修改master的配置文件:
- 增加三行配置
# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
port=3306
log-error=/usr/local/mysql/data/master.err
log-bin=/usr/local/mysql/data/binlog
server-id=10
character_set_server=utf8mb4
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency
修改slave的配置文件:
- 增加四行配置
# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
port=3306
log-error=/usr/local/mysql/data/slave.err
relay-log=/usr/local/mysql/data/relaylog
server-id=100
character_set_server=utf8mb4
log-bin=/usr/local/mysql/data/binlog
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency
skip-slave-start
增加配置说明:
log-bin:必须要开启二进制
skip-slave-start:当MASTER主服务器GTIDs没有启动时,跳过SLAVE服务器的启动(即master启动slave才启动)
注意:
当你把master主服务器的数据目录同步到slave从服务器后需要删除数据目录下的日志文件,避免他的日志文件对我们产生影响
master 服务器操作:
# service mysql stop
# rm -f /usr/local/mysql/data/auto.cnf
# rsync -av /usr/local/mysql/data root@10.1.1.100:/usr/local/mysql/
slave 服务器操作:删除日志文件
# rm -rf /usr/local/mysql/data/binlog.*
master 和 slave 重启服务:
# service mysql start
第二步:主从配置只读模式
在MASTER主服务器中创建一个账号,专门用于实现数据同步:
MySQL5.7及以下版本:
# mysql> grant replication slave on *.* to 'slave'@'10.1.1.%' identified by '123';
# mysql> flush privileges;
MySQL新版本中建议:
# mysql> create user 'slave'@'10.1.1.%' identified by '123';
# mysql> grant replication slave on *.* to 'slave'@'10.1.1.%';
# mysql> flush privileges;
选项说明:
replication slave:常用于建立复制时所需要用到的用户权限
开启主从配置只读模式:
- 与AB复制时master 锁表不一样,它只针对innodb引擎
- 且针对的账号是非root管理员账号,管理员还是可以进行修改的
master 和 slave 都要配置:
# mysql > set @@global.read_only=ON;
第三步:SLAVE重新配置change master to
- 与传统AB复制相比,不需要指定为二进制的名称和位置
- 只需要换成
master_auto_position=1
参数就行
如果前面配置了传统的AB复制需要先关闭重置一下slave:
# mysql> stop slave;
# mysql> reset slave;
如果是新设置的, 在SLAVE从服务器中,使用change master to指定主服务器,并实现数据同步:
# mysql> change master to
master_host='10.1.1.10',
master_user='slave',
master_password='123',
master_port=3306,
master_auto_position=1;
或
# mysql> change master to master_host='10.1.1.10',master_user='slave',master_password='123',master_port=3306,master_auto_position=1;
注意:
1.确保有复制用户
2.主要区别于传统复制的参数是:master_auto_position=1
开启基于GTIDs AB复制的slave:
# mysql> start slave;
#mysql> show slave status\\G
第四步:关闭主从服务器的只读模式
- master 和 slave 服务器关闭只读模式(master 先关闭)
# mysql> set @@global.read_only=OFF;
- 测试
master服务器插入:
# mysql > create database aaa;
# mysql > use aaa;
# mysql > create table bbb (id int not null auto_increment,name varchar(30),primary key(id));
# mysql > insert into aaa values (null,'a'),(null,'b');
slave服务器查看:
# mysql> select*from aaa.bbb;
SLAVE从服务器不小心写入数据解决方案
slave插入数据造成冲突:
先往slave 插入数据:
# mysql > use aaa;
# mysql > insert into bbb values (null,'c');
master 插入数据:
# mysql > use aaa;
# mysql > insert into bbb values (null,'d');
- slave 复制失败
方法一:跳过事务
第一步:slave 上查看最新的relay log 中继日志文件查找冲突引起的GTIDs 编号
slave 服务器操作:
查看最新的relay log:
# ll data/
[root@slave mysql]# ll data/
total 123120
...
-rw-r-----. 1 mysql mysql 200 Jun 17 19:56 relaylog.000001
-rw-r-----. 1 mysql mysql 2020 Jun 17 20:56 relaylog.000002 => 这就是最新的中继日志
-rw-r-----. 1 mysql mysql 76 Jun 17 19:56 relaylog.index
...
查看relay log内容找到冲突编号:
# mysqlbinlog data/relaylog.000002 | less
- relaylog.000002 中继日志中引起冲突的标号
第二步:找到冲突编号进入MySQL ,关闭slave
slave 操作:
# mysql > stop slave
第四步:指定编号跳过冲突事务
- 就是刚才找到的写入冲突编号
slave 操作:
# mysql > SET @@SESSION.GTID_NEXT= '9e04777e-cf44-11eb-b8eb-000c29bbeafc:11'/*!*/;
第五步:创建一个新的事务,并指定从哪个位置开始编号
slave 操作:
创建一个新的事务:
# mysql > begin;
# mysql > commit;
指定从哪个位置开始编号:
# mysql > SET @@SESSION.GTID_NEXT= 'AUTOMATIC';
第五步:开启slave
slave 操作:
# mysql > start slave;
# mysql > show slave status\\G
方法二:重新同步data目录,重新change master to…
mysql主从复制架构实现(代码片段)
...介绍1.什么是MySQL复制2.MySQL复制原理3.MySQL复制架构1)双机热备(AB复制)2)级联复制3)并联复制(一主多从)4)双主复制三、MySQL主从复制的搭建(AB复制)1.传统AB复制架构(M-S)2.环境准备3.MySQL主从复制核... 查看详情
linux----------mysql主从复制和基于gtid主从复制
目录一、传统mysql主从复制二、基于GTID主从复制三、GTID主从复制和传统主从复制相比四、基于GTID主从复制的配置一、传统mysql主从复制主从复制步骤:主库将所有的写操作记录到binlog日志中并生成一个logdump线程,将binlog日志传... 查看详情
mysql主从复制--mysql-5.6基于gtid及多线程复制
GTID,GlobalTransactionIdentifiers,全局事务标识符 由服务器的UUID和事务ID号组成一个唯一的标识。mysql5.6后,事务首部会记录serverUUID,追踪十分简单。UUID,UniversallyUniqueIdentifier,全局唯一标识符。 A为master,B、C... 查看详情
基于gtid的主从复制数据库
基于GTID的主从复制数据库全局身份识别GTID(globaltransactionidentifier)为了实现主备数据库的强一致性GTID=source_id:transaction_idsource_id表示执行事务的主库transaction_id是一个序列号,表示这个主库上执行的第n个事务。server_uuid是系统自动... 查看详情
基于gtid的主从复制搭建
前置检查server-id=10,master/slave不允许重复log-bingtid-mode=ONenforce-gtid-consistency=ON1,利用mysqlpump复制master数据到slave,搭建基于GTID的主从复制,缺少GTID处理方法,暂不成功。mysqlpump--host=--user=--password=--single-transaction 查看详情
mysql数据库在线热备简介(代码片段)
MySQL数据库在线热备简介MySQL集群概述MySQL复制简介MySQL复制原理MySQL复制架构㈠双机热备(AB复制,也叫主从复制)㈡级联复制㈢并联复制(一主多从)㈣双主复制MySQL集群概述集群的主要类型:高可用集群&... 查看详情
mha集群(gtid复制)和vip漂移(代码片段)
...怎么去配置MHA架构!这片博客不再细说,只说明其中MySQL主从搭建,这里使用的是gtid加上半同步复制!步骤与上一片博客一样,不同之处在于MySQL主从的搭建!详细的gtid搭建过程https://www.cnblogs.com/wxzhe/p/10055154.html上一片博客中,... 查看详情
gtid主从复制(代码片段)
目录一、基于GTID的主从复制1.什么是GTID2.GTID主从复制的优点3.GTID主从复制的缺点4.搭建GTID主从复制5.GTID复制和传统复制的区别一、基于GTID的主从复制1.什么是GTID1.全局事务标识符2.组成:UUID+TID f03a53e0-cd46-11ea-a2c4-000c292c767e:12.GTID... 查看详情
saltstack实现数据库基于gtid的主从复制
安装pkg部分[[email protected]pkg]#pwd/srv/salt/pkg[[email protected]pkg]#catinstall.slspkg-install: pkg.installed: -pkgs: -gcc -pcre-devel 查看详情
电商平台lnmp架构之mysql优化(代码片段)
电商平台lnmp架构之mysql优化1.Mysql的主从复制2.mysql一主两从3.基于GTID(全局事务标识)的主从复制4.半同步复制5.mysql异步复制6.延迟复制(SQL线程延迟)7.并行复制8.mysql的全同步复制(组复制)9.读写分离10.MHA高可用1.Mysql的主从... 查看详情
gtid主从复制mha高可用binlogserver实时备份atlas中间件读写分离(代码片段)
...上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力,那么它如何做到的呢?要想在分布式集群环境中不丢失事务& 查看详情
mysql主从复制—gtid集合信息的变更时机(包含gtid初始化)(代码片段)
参考:主从32讲的 2、GTID相关信息的变更时机 主从32讲的 3、GTID模块初始化和参数simplerecovery Mysql5.7Gtid内部学习(五)mysql.gtid_executed表/gtid_executed变量/gtid_purged变量的更改时机:https://www.jianshu.com/p/905d7... 查看详情
mysql主从复制—gtid集合信息的变更时机(包含gtid初始化)(代码片段)
参考:主从32讲的 2、GTID相关信息的变更时机 主从32讲的 3、GTID模块初始化和参数simplerecovery Mysql5.7Gtid内部学习(五)mysql.gtid_executed表/gtid_executed变量/gtid_purged变量的更改时机:https://www.jianshu.com/p/905d7... 查看详情
linux12-mysql数据库-->14.2mha高可用
文章目录MHA高可用一、MHA背景介绍二、MHA简介三、MHA工作原理3.1MHA的组成3.2MHA自动故障切换的步骤3.3.manager相关工具3.4node相关工具四、MHA的优点总结五、GTID主从复制5.1什么是GTID5.2GTID主从的原理(1)一个GTID的生命周期(2)架构... 查看详情
从理论到实战,彻底搞懂mysql主从复制原理(代码片段)
...战GTID前言MySQL主从复制也称为MySQL主从同步,是构建数据库高可用集群架构的基础, 查看详情
mysql主从复制(传统和gtids)
目录:一、MySQL集群概述:1.集群的主要类型:2.如何衡量高可用:3.常用的集群架构:二、MySQL复制简介:1.什么是MySQL复制:2.MySQL复制原理(重点):1).扩展(relaylog中继日志):... 查看详情
mysql5.7在线开启/关闭gtid
环境介绍Part1:写在最前截止本文撰写当日,MySQL5.7.16是官网的最新稳定版,本文将用MySQL5.7.16来进行演示。从MySQL5.6开始,支持了GTID复制模式,这种模式其实是把双刃剑,虽然容易搭建主从复制了,但使用不当,就容易出现一些... 查看详情
mysql基于gtid的复制方式
Mysql的复制方法一共有四种:基于sql语句、基于行、混合部署、基于GTIDSGTIDS的使用环境一般在一主多从下使用 GTIDS的环境:角色IPMaster192.168.200.101Slave192.168.200.102 实验步骤:如果不是新安装的mysql,那么我们需要将主节点... 查看详情