各位老铁们,本周老张的《MySQL王者晋级之路》一书终于出版了,现在可以预购啦!
预购链接地址:老张的数据库微店 前前后后经历了一年的准备时间,可谓十年磨一剑,把自己从业所有的精华和心血都灌输到其书中。其书中包含了MySQL方方面面的知识点,是之前我的一篇博客“从青铜到王者,快速提升你MySQL数据库段位的全面深入剖析”。用一句学生对我说得话,老师喜欢您的王者荣耀情怀,但更喜欢您的技术情操。讲真,不要错过!特别感谢在我从事技术道路上,帮助过我的前辈及兄弟们,这条路上的所有的辛酸,只有你们最懂我!也要感谢对我博客一直支持的兄弟们!
今儿的这篇博文,可以让大家快速了解GTID特性,并能灵活地运用到生产环境中,希望对大家有帮助。
GTID原理介绍 GTID又叫全局事务ID(Global Transaction ID),是一个已提交事务的编号,并且是一个全局唯一的编号。MySQL5.6版本之后在主从复制类型上新增了GTID复制。
GTID是由server_uuid和事务id组成的,即GTID = server_uuid:transaction_id。 server_uuid是在数据库启动过程中自动生成的,每台机器的server-uuid不一样。uuid存放在数据目录的auto.cnf文件下。而transaction_id就是事务提交时由系统顺序分配的一个不会重复的序列号。
GTID存在的价值 (1)GTID使用master_auto_position=1代替了基于binlog和position号的主从复制搭建方式,更便于主从复制的搭建。
(2)GTID可以知道事务在最开始是在哪个实例上提交的。
(3)GTID方便实现主从之间的failover,再也不用不断地去找position和binlog 了。
主从复制中GTID的管理与维护 GTID带来最方便的一点就是主从复制的搭建过程了。它跟异步复制、半同步复制类似,只不过不再利用传统复制模式的binlog文件和position号了,而是在从库“change master to”时使用master_auto_position=1的方式进行搭建,这就让操作变得更加方便和可靠。
GTID搭建过程中的注意事项 主从库需要设置的参数如下。
主库配置:gtid_mode=on
enforce_gtid_consistency=on
log_bin=on *server-id不能与从库一样。*
binlog_format=row 从库配置:gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1 虽然在MySQL5.7版本之后可以关闭掉log_slave_updates,使用gtid_executed这张表。但还是建议在从库中开启。server-id不能与主库一样。
配置好参数之后,主库也创建了复制账号,如果是新搭建的主从环境,就可以直接在从库就可以执行change master to语句了。如果是已经运行了一段期间的主库,还需要利用备份方式从主库“dump”出数据到从库中,先完成基于某个点的GTID复制,然后从库从那个点之后再开始追主库。利用mysqldump备份,备份后的文件中会有SET @@GLOBAL.GTID_PURGED= *,利用xtrabackup工具备份,备份后的文件中会直接记录需要跳过的GTID。启动复制之后,从库会直接跳过已经执行过GTID的范围,直接从主库获取新的GTID信息。
在主库执行show master status命令,通过Executed_Gtid_Set来查看执行过的GTID。
该表会记录已经执行的GTID集合的信息,有了这张表,就不用再像MySQL5.6版本时,必须开启log_slave_updates参数,从库才可以进行复制。GTID信息会保存在gtid_executed表中,可以关闭从库的binlog,节约binlog的记录开销。在执行reset master时,会清空表内所有的数据。
MySQL5.7还有一个参数gtid_executed_compression_period,用来控制gtid_executed表的压缩。该参数默认值为1000,意味着表压缩在执行完1000个事务之后开始。
(3)需要在主从服务器上同时调整GTID模式为off_permissive。
(5)然后把gtid_mode=off和enforce_gtid_consistency=off写入配置文件my.cnf中。下次重启直接生效。
(6)测试是否切换成功。
首先向主库的zs库下的tt表中插入一条数据:
然后在从库中执行show slave status查看主从复制状态,发现GTID的值没有增加,证明切换成功:
(2)在主从服务器上把enforce_gtid_consistency改为on,保证GTID的一致性。
(4)在主从服务器上同时调整GTID模式为on_permissive。
(6)在主从库上同时设置gtid_mode=on。
(7)把传统复制模式改为GTID复制。先要把原有的传统复制停掉,执行stop slave操作,然后再执行change master to master_auto_position=1。
执行完stop slave,查看当前主从的状态为:
然后再执行change master to master_auto_position=1,开启主从复制start slave。
(8)验证是否切换成功。
首先向主库的zs库下的tt表中插入一条数据:
然后在从库中执行show slave status查看主从复制状态,发现GTID的值增加了。证明开启了GTID复制方式,切换成功。
|