mysql数据库在线热备(主从复制之基于gtids的ab复制)(代码片段)

锦衣admin 锦衣admin     2023-03-13     264

关键词:

MySQL主从复制之基于GTIDs的AB复制架构(在线热备)

基于GTIDs的AB复制架构(M-S)

GTIDs概述

什么是GTIDs以及有什么特点?

  1. GTIDs(Global transaction identifiers)全局事务标识符,是mysql 5.6新加入的一项技术

  2. 当使用GTIDs时,每一个事务都可以被识别并且跟踪

  3. 添加新的slave或者当发生故障需要将master身份或者角色迁移到slave上时,都无需考虑是哪一个二进制日志以及哪个position值,极大简化了相关操作

  4. GTIDs是完全基于事务的,因此不支持MYISAM存储引擎

  5. GTID由source_id和transaction_id组成

    1)source_id来自于server_uuid,可以在auto.cnf中看到

    2)transation_id是一个序列数字,自动生成.

使用GTIDs的限制条件有哪些?

  1. 不支持非事务引擎(MyISAM),因为可能会导致多个gtid分配给同一个事务

  2. create table … select 语句不支持(主库语法报错)

  3. create/drop temporary table 语句不支持

  4. 必须使用enforce-gtid-consistency参数

  5. sql-slave-skip-counter不支持(传统的跳过错误方式)

  6. GTID复制环境中必须要求统一开启和GTID或者关闭GTID

  7. 在mysql 5.6.7之前,使用mysql_upgrade命令会出现问题

基于GTIDs的主从复制

在生产环境中,大多数情况下使用的MySQL5.6基本上都是从5.5或者更低的版本升级而来,这就意味着之前的mysql replication方案是基于传统的方式部署,并且已经在运行,因此,接下来我们就利用已有的环境升级至基于GITDs的Replication

〇 思路

  1. 修改配置文件支持GTIDs (主+从)
  2. 重启数据库 (主+从)
  3. 为了保证数据一致性,master和slave设置为只读模式 (主+从)
  4. 从服务器上重新配置同步 (从)

第一步:修改配置文件支持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,那么我们需要将主节点... 查看详情