共计 1624 个字符,预计需要花费 5 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要介绍了 Mysql 中基于 GTID 的复制模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
GTID 定义
GTID(Global Transaction Identifier)全局事务标识。GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文件 +Position 的主从复制,基于 GTID 的主从复制,数据一致性更高,主从数据复制更健壮,主从切换、故障切换不易出错,很少需要人为介入处理。
表示方式
GTID = server_uuid:transaction_id
其 GTID 通常会记录在 MySQL 的系统变量 @@GLOBAL.gtid_executed 以及系统表 mysql.gtid_executed 中,系统变量 @@GLOBAL.gtid_executed 在内存中,属于非持久化存储,而系统表 mysql.gtid_executed 属于持久化存储。
GTID 比传统复制的优势
更简单的搭建主从复制
更简单的实现 failover (主从切换),不用以前那样一步一步的去找 log_file 和 log_pos
GTID 是连续的没有空洞的,保证数据的一致性,零丢失。
复制集群有一个统一的方式识别复制位置,给集群管理带来了便利
GTID 的限制
在一个事务里面混合使用引擎如 Innodb,myisam,造成多个 GTIDS
CREATE TABLE…..SELECT 不能使用
CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE 不能在事务内使用
主从复制流程图
GTID 生命周期
当一个事务在一个主库上被执行和提交,那么这个事务就会被分配一个和该主库 uuid 相关联的 gtid,这个 gtid 被写入到主库的 binlog 文件中。
当这个 binlog 文件达到最大值发生轮转,或者 MySQL Server 关闭时,上一个 binlog 文件中的事务 GTID 将会被写入到 mysql.gtid_executed 表中。
事务提交时,该事务的 gtid 会很快的添加到系统变量 @@GLOBAL.gtid_executed, 但是系统表 mysql.gtid_executed 则不会,应为有部分 gtid 还在 binlog 中,需要等到 binlog 轮转或者 mysqlServer 关闭时才会写入到 mysql。gtid_executed 表中.
主库上的 binlog 通过主从复制协议传送到从库,并写入到从库的 relay log(中继日志), 从库读取 relay log 中的 gtid 和对应的事务信息,把 gtid_next 设置为该 gtid 值,使得从库使用该 gtid 值应用其对应的事务
如果多个线程并发应用同一个事务,比如多个线程设置 gtid_next 为同一个值,MySQL Server 只允许其中一个线程执行,gtid_owned 系统变量记录着谁拥有该 GTID.
传统更换 GTID 复制模式
配置 GTID
所有服务器设置 global.read_only 参数,等待主从服务器同步完毕;
mysql SET @@global.read_only = ON;
依次重启主从服务器;
使用 change master 更新主从配置;
mysql CHANGE MASTER TO
MASTER_HOST = host,
MASTER_PORT = port,
MASTER_USER = user,
MASTER_PASSWORD = password,
MASTER_AUTO_POSITION = 1;
5、开启复制
mysql START SLAVE;
6、验证主从复制
mysql show slave status \G
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“Mysql 中基于 GTID 的复制模式是什么”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!
向 AI 问一下细节