加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL_GTID的示例剖析

发布时间:2023-08-31 12:59:23 所属栏目:MySql教程 来源:
导读:这篇文章给大家分享的是有关MYSQL_GTID的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、GTID概述 GTID是MYSQL5.6新增的特性,GTID(Global Transaction Identifier)全称

这篇文章给大家分享的是有关MYSQL_GTID的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、GTID概述

 GTID是MYSQL5.6新增的特性,GTID(Global Transaction Identifier)全称为全局事务标示符,用以数据库实例事务唯一标识,其组成主要是source_id和transaction_id 即GTID = source_id:transaction_id。其中source_id是数据库启动自动生成的数据库实例唯一标识,保存在auto.cnf中,而transaction_id则是事务执行的序列号。

二、GTID优缺点

 优点:

   复制安全性更高,一个事务在每个实例上只执行一次;

   故障切换简单,可通过设置MASTER_AUTO_POSITION=1,而非master_log_file和master_log_pos来建立主从关系;

   可根据GTID确定事务最早提交的实例;

 缺点:

   组复制中,必须要求统一开启GTID或者关闭GTID;

   不支持复制create table table_name select ... from table_name_xx ;

   不支持create temporary table和drop temporary table;

   不支持sql_slave_skip_counter,可通过set global gtid_next='' 跳过;

   从库和主库都必须设置log_slave_updates

三、GTID工作原理

 1、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。

 2、slave端的i/o 线程将变更的binlog,写入到本地的relay log中。

 3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。

 4、如果有记录,说明该GTID的事务已经执行,slave会忽略。

 5、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

 6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

四、GTID开启和关闭

 gtid_mode=ON(必选)

 log_bin=ON(必选)

 log-slave-updates=ON(必选)

 enforce-gtid-consistency(必选)

 log-bin = /home/mysql/mysql-bin(必选)

 binlog_format = MIXED(必选mixed或者row)

 ## 

 change master to master_host = 'ipaddr',master_port = 3306,master_user = 'username',master_password='password',master_auto_position = 1;

五、GTID适用场景

 1、搭建高可用架构,方便主从切换后,新的从库重新指定主库(例如一主二从的结构,A为mater,B为Slave,C为Slave,A宕机切换到B后,C重新指定主库为B)

 2、不经常使用create table table_name select * from table_name/create temporary table/update t1,t2 where ...这种语句的场合

感谢各位的阅读!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章