必须知道的Group Replication的一个细节.否则,掉入"深坑"却毫无察觉
MGR中某个事务就悄无声息的漏掉了,数据丢了,跌入”深坑“都毫无察觉等着被”宰杀“,怕不?惊不?这个细节所有准备使用MGR的朋友都需要知道。
如ppt,某个事务就悄无声息的漏掉了,数据丢了,你还不知道。这是一个带dba进入”跑路“的坑。
其实,这个问题很简单,但是不了解mgr的人基本都会忽略,作者在初学mgr的时候,同样忽略了这个问题,因为没有人或者文档,资料告诉我需要谨慎对待这个group_replication_boostrap_group 参数,所以,亲自踩了这个坑。踩了之后还不知道自己掉坑里了,等着被宰杀,这个是最恐怖的。
具体的过程是这样的。作者在初始化启动MGR集群的第一个节点时,将
group_replication_boostrap_group 参数设置为on ,之后就没有管了。后来,这个节点从集群上剥离了,需要重新启动group replication。 当重新启动group replication之后,发现这个节点并没有跟其他节点进行数据同步。 经检查,是因为参数group_replication_boostrap_group设置为on的原因,该节点作为一个独立的集群启动了,所以它没有跟其他节点同步数据。
发现这个问题之后,所以重新设置group_replication_boostrap_group为off, 然后再通过start group_replication启动gr服务,然后发现“妥了“,数据开始同步了。但是,巨大的隐患就在此产生了,已经踩入了深坑,该节点已经丢失了一个事务,不再在是一个完整的数据副本。 数据一致性已破坏,而且当时还毫不知觉。
原因:当节点以独立的集群角色启动的时候,会产生一个view change的事件,也会产生一个事务,也会使gtid_executed增加一个事务。当将该节点再次跟GR集群同步时,会从下一个事务开始进行同步,真正的业务产生的这个事务号的事务就会漏掉。
group replication为更强地保护跟解决数据一致性而生,但这个细节,如果被忽略,将把使用者带入深渊。 当作者发现这个细节时,当时”一身汗“。
为了不踩坑,请注意下面三点:
1。永远不要将group_replication_boostrap_group在参数文件中设置为on .不然节点重启时,可能带你入坑。
2。在初始启动GR集群中的第一个节点时,启动完毕之后,立即将该group_replication_boostrap_group参数设置为off, 以免之后忘记设置。
3。养成好的习惯,执行start group_replication命令之前,先检查一下参数group_replication_boostrap_group是否设置正确,以免因为其他人对该参数的改动而带你入坑。
- 求伯君—— 一个你必须知道的程序员
- 【转】任何一个学习.net的人都必须知道...
- 安装使用Ubuntu之vim必须知道的细节
- C语言是作为一个程序员必须了解的,那么你知道怎样学习C语言吗?
- Linux Shell的信号trap功能你必须知道的细节
- 设计一个针对全球的、访问量极大的id生成系统。 必须保证用户每次从该系统得到的id是唯一的,而且在概率上毫无碰撞可能。
- 本来从动态壁纸预览页面设置一个动态壁纸回到桌面便可以看到桌面动态壁纸,可以观察得到自己的动态壁纸是否设置成功了(必须知道设置是否成功的结构,因为还有一些操作需要完成)! 但是现在是要在自己的应用中进入
- 一个优秀的Linux程序员必须知道的快捷键,你知道几个?
- 做一个中国式站长必须知道的五十个问题
- C++ vector迭代器iterator 和 erase() 如果这些细节你都知道,你一定是一个认真的人
- [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器
- 做一个中国式站长必须知道的五十个问题
- 一个成功的博客必须知道的80个博客工具
- 【关于MAC】|| 作为一个程序员,这些mac终端常用操作命令你必须都知道...
- 2#使用新安装的ubuntu,之vim必须知道的细节
- java中自己定义一个类,类中必须有一个自己定义的构造方法,否则编译系统识别不了
- 你必须知道一个移动产品的基本需求特性
- Linux Shell的信号trap功能你必须知道的细节
- 在js中声明一个变量必须使用var,否则有可能报错
- [文摘20070914]一个成功的博客必须知道的80个博客工具