mysql gtid 限制_MySQL GTID详解

GTID介绍

从MySQL 5.6.5开始支持GTID,每一个在主库上提交的事务在复制集群中可以生成一个唯一的ID。

一个GTID在一个服务器上只执行一次,避免重复执行导致主从不一致或者数据混乱。

在传统复制的slave,binlog日志可以不开启,但是在GTID中,slave的binlog必须开启,目的是记录执行过的GTID。

GTID的组成

GTID = server_uuid:transaction_id

server_uuid:在数据目录下的 auto.cnf 文件是用来保存 server_uuid的。MySQL启动时,会读取 auto.cnf 文件,如果 auto.cnf 文件丢失,则生成一个新的 server_uuid,那么这样GTID的值也会改变。

transaction_id表示该实例上已经提交的事务数量,并且随着事务提交单调递增。例如,要提交的第一个事务的 transaction_id 是1,第十个 transaction_id 是 10,在GTID中,transaction_id不可能是0。

GTID的好处

1.更简单的实现failover ,主从环境主库的dump进程可以直接通过GTID定位到需要发送的binary log位置,而不再需要指定binary log的 LOG_FILE和LOG_POS,只需指定主库的ip、port、username、password 就可以了,因为GTID的复制是自动的,所以会自动找到GTID去同步。根据GTID可以知道事务最初是在哪个实例上提交的。

2.基于库的多线程复制,多线程是针对每个database开启相应的独立线程,即每个库有一个单独的sql thread,如果线上业务中,只有一个database或者绝大多数压力集中在个别database的话,多线程并发复制特性就没有意义了(slave-parallel-workers=0 表示禁用多线程功能)。

GTID的限制

1.不支持非事务引擎(从库报错,stop slave;start slave;忽略)。

2.不支持create table xxx select 语句复制(在最新版本8.0.21已经解决了)。

3.不允许一个SQL同时更新一个事务引擎和非事务引擎的表。

4.在一个复制组中,必须要求统一开启GTID或者是关闭GTID。

5.开启GTID需要重启(MySQL5.7.6版本开始可以在线升级gtid模式)。

6.开启GTID后,就不再使用原来的传统的复制方式。

7.对于create temporary table和drop temporary语句不支持。

8.不支持sql_slave_skip_counter。

开启GTID

gtid_mode = on

log-bin = mysql-bin #5.6必选 5.7.5和之后可选,为了高可用,最好设置

log-slave-updates = 1 #5.6必选 5.7.5和之后可选,为了高可用,最好设置

enforce-gtid-consistency = 1

判断复制方式GTID 还是传统复制pos

Show slave status 查看Auto_Position字段。

0是传统复制pos方式。

1是gtid方式。

gtid_pureged

gtid_pureged 命令的实际意义:因为没有binlog信息(expire_logs_days),不考虑这些gtid确认和回滚。常用备份恢复,搭建从库的时候使用。

自动触发机制:flush,服务器重新启动

如果purged掉的GTIDs会包含到gtid_executed中。

mysqldump --set-gtid-purged=off/on 参数:是否将GTID_PURGED 添加到输出中。

gtid_pureged使用场景:

1.在副本上禁用二进制日志记录提交的复制事务的GTIDs。

2.写入二进制日志文件的事务的GTIDs,该文件现在已被清除。

3.通过语句set @@GLOBAL.gtid_purged显式添加到集合中的gtid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值