网站百度收录批量查询,怎么建设属于自己的网站,百度电话号码,天津网站建设教程GTID学习记录 来源
知乎阿里云#xff1a;MySQL 基于GTID复制实现的工作原理MySQL的GTID主从搭建及内部原理MySQL5.7杀手级新特性#xff1a;GTID原理与实战 文章目录 1 什么是GTID2 GTID的组成部分3 GTID如何产生4 GTID的工作原理5 GTID的生成和使用由以下几步组成#xf…GTID学习记录 来源
知乎阿里云MySQL 基于GTID复制实现的工作原理MySQL的GTID主从搭建及内部原理MySQL5.7杀手级新特性GTID原理与实战 文章目录 1 什么是GTID2 GTID的组成部分3 GTID如何产生4 GTID的工作原理5 GTID的生成和使用由以下几步组成6 GTID和Binlog的关系 1 什么是GTID
GTID (Global Transaction IDentifier) 是全局事务标识。它具有全局唯一性一个事务对应一个GTID。唯一性不仅限于主服务器GTID在所有的从服务器上也是唯一的。一个GTID在一个服务器上只执行一次从而避免重复执行导致数据混乱或主从不一致。
在传统的复制里面当发生故障需要主从切换时服务器需要找到binlog和pos点然后将其设定为新的主节点开启复制。相对来说比较麻烦也容易出错。在MySQL 5.6里面MySQL会通过内部机制自动匹配GTID断点不再寻找binlog和pos点。我们只需要知道主节点的ip端口以及账号密码就可以自动复制。 2 GTID的组成部分
GDIT由两部分组成GTID source_id:transaction_id。
其中source_id是产生GTID的服务器即是server_uuid在第一次启动时生成sql/mysqld.cc: generate_server_uuid()并保存到DATADIR/auto.cnf文件里。transaction_id是序列号sequence number在每台MySQL服务器上都是从1开始自增长的顺序号是事务的唯一标识。
例如3E11FA47-71CA-11E1-9E33-C80AA9429562:23 GTID 的集合是一组GTIDs可以用source_idtransaction_id范围表示例如3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 复杂一点的如果这组 GTIDs 来自不同的 source_id各组 source_id 之间用逗号分隔如果事务序号有多个范围区间各组范围之间用冒号分隔例如3E11FA47-71CA-11E1-9E33-C80AA9429562:23,3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 3 GTID如何产生
GTID的生成受GTID_NEXT控制。
在主服务器上GTID_NEXT默认值是AUTOMATIC即在每次事务提交时自动生成GTID。它从当前已执行的GTID集合即gtid_executed中找一个大于0的未使用的最小值作为下个事务GTID。同时在实际的更新事务记录之前将GTID写入到binlogset GTID_NEXT记录。 在Slave上从binlog先读取到主库的GTID(即get GTID_NEXT记录)而后执行的事务采用该GTID。 4 GTID的工作原理
GTID在所有主从服务器上都是不重复的。所以所有在从服务器上执行的事务都可以在binlog找到。一旦一个事务提交了与拥有相同GTID的后续事务都会被忽略。这样可以保证从服务器不会重复执行同一件事务。
当使用GTID时从服务器不需要保留任何非本地数据。使用数据都可以从replicate data stream。 5 GTID的生成和使用由以下几步组成
主服务器更新数据时会在事务前产生GTID一同记录到binlog日志中。binlog传送到从服务器后被写入到本地的relay log中。从服务器读取GTID并将其设定为自己的GTIDGTID_NEXT系统。sql线程从relay log中获取GTID然后对比从服务器端的binlog是否有记录。如果有记录说明该GTID的事务已经执行从服务器会忽略。如果没有记录从服务器就会从relay log中执行该GTID的事务并记录到binlog。 6 GTID和Binlog的关系
MySQL5.7杀手级新特性GTID原理与实战