您现在的位置:主页 > 新闻动态 >

惊天深“坑”:server_id你真的会用吗?

时期:2022-05-13 18:56 点击数:
本文摘要:本文我们来看一个场景,两台MySQL实例使用主从复制,当master故障,触发高可用切换,新master上线后,通过备份重建旧master并建设复制后,数据发生丢失。

AG真人国际厅

本文我们来看一个场景,两台MySQL实例使用主从复制,当master故障,触发高可用切换,新master上线后,通过备份重建旧master并建设复制后,数据发生丢失。以下我们通过图解还原一遍其时的场景:注:图中标注的id指的是MySQL的server_id server_id设置:默认值1或0需要设置时通过参数server-id指定 配景:当设置MySQL复制时,server_id是必填项,用来区分复制拓扑中的各个实例,例如在循环的级联复制中(A=>B=>C=>A),制止重复数据不须要的复制(C=>A数据重复,不须要) 当slave的io线程发现binlog中的server_id与自身一样时,默认不会将该binlog写入自身的relay log中,即跳过了该数据的复制,同时也能淘汰写relay log对磁盘的压力 然而这种机制在高可用切换场景下会引入潜在的隐患: 隐患一:如上图所示,从备份恢复的旧master仍沿用了原来的server_id A,导致io线程跳过了A:2事务,最终丢失了A:2的数据 隐患二:级联复制中,当不相邻实例的server_id相同时,也会泛起复制数据丢失 上述两种隐患的存在都是因为在复制拓扑中非直接相连的MySQL server_id重复。在普通的一对主从复制中,slave的io线程会检查与自己相连的master的server_id是否与自身重复,若发现重复会停止复制抛堕落误注:可通过设置--replicate-same-server-id改变以上默认行为使用建议:设置MySQL复制时,为每个实例设置差别的server_id通过备份工具还原实例后,为实例设置一个新的server_id 附加题:除了server_id,MySQL5.6起引入了server_uuidserver_uuid设置:当MySQL启动时实验从 data_dir/auto.cnf中读取 uuid如果1实验失败,则生成一个新的uuid并写入data_dir/auto.cnf 配景:主从复制中,要求master和slave的server_uuid差别,否则在复制初始化时会泛起报错GTID就是使用了server_uuid做为全局唯一的标识 使用建议:如果直接拷贝master的数据文件来建设slave,注意要删除auto.cnf,重启使MySQL重新生成一个新的server_uuid,否则复制将会异常本文参考:https://dev.mysql.com/doc/refman/8.0/en/replication-options-slave.html。

AG真人国际厅


本文关键词:AG真人平台首页,惊天,深,“,坑,”,server,你,真的,会用,吗,本文

本文来源:AG真人国际厅-www.huoxiuyundong.com



Copyright © 2004-2021 www.huoxiuyundong.com. AG真人国际厅科技 版权所有 备案号:ICP备15298865号-5