首页 > 数据库 > 数据库开发技术 > 8.0.30,一个值得上车MGR的版本
8.0.30,这个版本没有 MGR 方面的重大修改,为什么我说值得上车 MGR 呢?
只因为 8.0.30 新增了sql_generate_invisible_primary_key参数,以下我简称为 GIPK 模式!
GIPK 模式下,创建表时如果没有显式定义主键会自动添加一个不可见主键索引,请参考以下两张表:
## sql_generate_invisible_primary_key=off 建的表
mysql> SHOW CREATE TABLE auto_0\G
*************************** 1. row ***************************
Table: auto_0
Create Table: CREATE TABLE `auto_0` (
`c1` varchar(50) DEFAULT NULL,
`c2` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
## sql_generate_invisible_primary_key=on 建的表
mysql> SHOW CREATE TABLE auto_1\G
*************************** 1. row ***************************
Table: auto_1
Create Table: CREATE TABLE `auto_1` (
`my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
`c1` varchar(50) DEFAULT NULL,
`c2` int DEFAULT NULL,
PRIMARY KEY (`my_row_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
在官方没有设计这个功能之前,我早在 percona 工程师的博客上听过了这个设计构想,当时就觉得非常棒,可行度很高,官方现在在工程上实现了。这是一个伟大的设计。
select * from xxx 出来的结果和之前是兼容的,不会多出来 my_row_id 列。my_row_id的列,因为 GIPK 模式自动创建的不可见主键列固定就叫做my_row_id,会有冲突导致创建表失败他解决了大家卡住很多人上车 MGR 的一个硬性要求,表必须要有主键!
实际上,没有主键在主从架构甚至单机架构也是不建议的,现在 GIPK 这个特性可以让那些懒惰的开发再也无法阻拦 MGR 的崛起。
8.0.30 MGR 上车吧!
MySQL 活了那么久一直没有一个靠谱的高可用架构方案,所有的高可用架构都是第三方提供的,主流的例如 keepalived + 主从/双主架构、MHA 架构、orchestrator 架构,一直到 5.7.17 才出来第一个官方的高可用架构 MGR。
为什么我说前面那 3 个流行的架构不靠谱,我一个一个来说。
再来看 MGR,官方开发,能保证可靠稳定,不存在作者跑路现象,并且 MGR 是采用 paxso 仲裁的算法,三机架构就是三个节点投票,获得两票的可以选为主,一般正常使用不会脑裂。
MySQL8.0 的 MGR 相对与 MySQL5.7 的 MGR 有以下优势,所以 MGR 对于 5.7 版本是不合适的。
以上表格没有花很多心思总结,实际上应该会有更多的对比项证明 5.7 不适合 MGR。重点是最后一个,导致 5.7 根本上车不了 MGR。
以上表格总结自《深入浅出MGR专栏文章》,食用 MGR 的指南,建议阅读后享受 MGR。
参考:
https://gitee.com/GreatSQL/GreatSQL-Doc#%E4%B8%93%E6%A0%8F%E6%96%87%E7%AB%A0
原文作者:芬达的学习笔记;如有侵权,请联系管理员删除。