共计 1710 个字符,预计需要花费 5 分钟才能阅读完成。
这篇文章给大家分享的是有关 MYSQL_GTID 的示例分析的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。
一、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 … 这种语句的场合
六、GTID 相关参数
comment
gtid_executed
执行过的所有 GTID,可通过 reset master 重置
gtid_purged
丢弃掉的 GTID,设置后从而导致 slave 不会再去 master 请求这些 GTIDs,并且 Executed_Gtid_Set 为空时,才可以设置此值
gtid_mode
gtid 模式
gtid_next
session 级别的变量,下一个 gtid
gtid_owned
正在运行的 gtid
enforce_gtid_consistency
保证 GTID 安全的参数
感谢各位的阅读!关于“MYSQL_GTID 的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!