mysql 5.7不支持declare_B站直播MySQL冲冲冲第一期文稿版

《MySQL冲冲冲》第一期已经于上周四(8.27)在 B 站开播,本文是节目的文稿版。发刊词 ?

第一期文稿

704c6fb33da438f438890db7bb04157d.gif 704c6fb33da438f438890db7bb04157d.gif

现在是不是升级 MySQL 8.0 的好时机?

开场白

Hello 大家好!这里是由爱可生开源社区赞助和 IMG 社区联合举办的《MySQL冲冲冲》节目,第一季一共八集。

我穿的 T 恤上面印着:一个有态度的 MySQL 社区 和 IMG 社区 Logo;一个有深度的 MySQL 社区 和 爱可生 Logo。非常感谢爱可生开源社区给我们的支持,大家可以看到我们在每次直播节目中给大家准备了非常丰厚的礼品,希望大家关注爱可生开源社区和我们的 IMG (Inside MySQL)社区。

cc389f08b65af21c1abda28bdab85d28.png

话题时间

现在我们来讲一下《MySQL冲冲冲》第一期的话题,也就是:MySQL 8.0 现在是否升级的好时机?

在 Inside MySQL 公众号上面,前几天发起了一个投票。MySQL 8.0 哪些是不容错过的好特性?投票结果 TOP 3 的功能是:快速加列、MGR、DDL 操作原子化以及 Hash Join(并列第三),姜老师主要对 TOP 3 功能来进行阐述。

1、 快速加列

首先,快速加列功能十分硬核,因为加列操作对运维 &DBA 来说,这个需求简直是太普遍了。每个 DBA 每周要处理大量的加列变更的工单,所以有了这样的一个功能特性,能使得我们 MySQL DBA 非常容易的去做这件事情。

MySQL 5.6 版本提供了在线加列的功能,但是对业务还是会有一定影响,对一些大表的加列操作都是通过 pt-osc。但 pt-osc 本身又有很多限制,如果有大事务也会有比较大的影响。所以说 pt-osc 虽好,真的要做这些事情,DBA 需要不断地验证,实时的监控变更加列操作是否对线上业务产生影响。有了快速加列这个功能的话你会发现,这就是秒加!按下回车键就列加完了。所有加列的默认值都是初始定义的,只有行发生变更,新加列值才发生变更。

该功能也是由腾讯互娱数据库团队提的一个 patch,我们也能看到中国的 MySQL 内核开发人员能力也是非常强的。也希望未来有越来越多的同学能参与到这样一个世界级的开源项目中贡献自己的一份力量。并且能合并到主版本中,对于内核开发人员这是一件非常棒的事情,相信他们的成就感会非常非常高。

2、Atomic DDL

这个功能从整体架构上是一个非常非常大的变更,因为要实现 Atomic DDL 的本质是将所有的元数据表从 MyISAM 引擎变更为 InnoDB 引擎。这个变动非常非常大从代码量来看,这会导致一些锁的机制,比如:元数据锁,都会发生内核代码层的一个修改。

功能本身没有什么好特别讲的,就是把 DDL 操作原子化。之前我们遇到 DDL 操作碰到 Crash,再启来后比较讨厌,会有一个临时文件一个 frm 文件要做处理,现在就不用了,因为是原子的。但发生 DDL 并发生 Crash 这种概率万分之一甚至更低。但基于这个特性对未来最大的影响是 InnoDB 可以在做很多其它的事请,比如transactional DDL,就像微软的 SQL Server,就是 DDL 也是可以回滚的。基于现在 InnoDB 的元数据表,要做这件事情本身不是特别难。如果做内核的同学感兴趣可以去实现一下,从 Atomic 编程 transactional。

这个改动是一个很基建的,未来对 InnoDB 的发展,不止于 Atomic 这一个功能。大家可以发挥想象,非常棒的一个功能!

3、Hash Join

这个功能之前也是其它数据库爱好者比如 PG DBA 吐槽 MySQL 不支持,那么 8.0.18 版本支持,8.0.19 版本去掉了早期 Join 算法  Block Nested-Loop Join。现在如果优化器选择没有索引的话,就直接使用 Hash Join。这功能还是非常棒的,而且比 MariaDB 实现的要好。

大家知道 MariaDB 在 5.5 版本也支持一个所谓的 Hash Join,但是实现的非常非常弱。为什么这么说?第一点,它不是优化器的选择,是你要指定选择 Hash Join。第二点,如果表大于内存是不支持的。MySQL 8.0 把这个问题解决的非常好,如果超过内存可以基于磁盘。唯一要改进的是,目前不能利用多线程特性。受限于此主要还是优化器本身的限制,8.0 版本本身的优化器对于并行度的支持还是非常弱的,现在只支持对 COUNT(*) 主键的扫描去支持并行。

我相信未来这个功能对多核多线程的支持会实现,现在对优化器的重构也是为了实现这个目的。Hash Join 对业务有多大的帮助是需要探讨的。MySQL 成功与否是否取决于 Hash Join 呢?我觉得并不是。MySQL 二十多年没有 Hash Join,大家也用的好好的。当推出 Hash Join之后,是一个锦上添花的。例如报表类的操作我们可以利用到 Hash Join 这个功能了,比如对我自己来说,有很多爬虫拿取数据,之后对数据做报表分析。虽然数据量达到百万级也不是特别大,但是需要接入 Power BI 去做展示,用 MySQL 速度还是比较慢,更新到 8.0 之后就快了非常多。

对于风控类业务来说,数据量不是特别大,需要做分析。而且表的变化非常大,加列需求也比较多。我觉得 MySQL 8.0 的加列和 Hash Join 对于风控类型的业务来说有很大的帮助。

4、Group Replication

对于 MGR 最重要的一点就是,如果要使用 MGR 功能,我强烈建议大家使用 MySQL 8.0 版本而不是 5.7 版本。因为 5.7 版本有很多 Bug 没有修复在 8.0 上修复了。对于网络分区的代码强壮性和稳定性,8.0 比 5.7 做的更好,并且提供了一些新的参数来处理一些网络分区的情况。因为之前也踩了很多坑,所以如果你要在生产环境使用 MGR 强烈建议升级或直接使用 8.0 版本。

现在是不是升级 8.0 的好时机?

姜老师觉得,现在已经是一个升级 8.0 非常非常好的时机了。因为 8.0 已经推出两年多的时间了。从软件生命周期来看,对于 5.7 只会修复 Bug 没有新特性了。另外 8.0 版本本身发布的方式也发生了很多变化,使用了小版本、快速迭代功能方式。也就是大家会发现从 8.0 开始,每个小版本都会有大的特性。这与 5.5、5.6、5.7 是非常大的一个区别。

大家回忆一下, 5.6 版本推出了基于库的并行复制,5.7 推出了 MTS,是在两个大版本提供的。但是 8.0 你会发现每个小版本都会有很大的特性。比如 8.0.12 是第一个 GA 的版本,8.0.13 就推出了快速加列,8.0.17 推出了 clone plugin 备份插件,8.0.18 推出了 Hash Join,8.0.19 推出了隐藏索引、降序索引。MySQL 的发布方式发生了翻天覆地的变化!MySQL 5.7 就享受不到这些特性。

从软件生命周期和发布方式上看,现在都是升级 8.0 的好时机。据我所知,很多金融公司、银行,已经在生产环境中部署了大量 8.0 的版本。

认证机制

我们在使用 MySQL 8.0 时最大的变化就是它的认证机制。原来(5.7)的 native_password 变成了 sha_256。如果 MySQL 升级后想对业务无感知,需要把验证方式设置成 native_password 模式来兼容 5.7,其它方面影响还好不是特别大。按照正常的升级方式从 5.7 升级到 8.0,你就能享受到 8.0 的特性。

最后

作为一名资深的数据开发者或者 DBA 也好,我看到了官方对 MySQL 的诚意。他的确开发了一些非常棒的特性,符合我们业务的需求。强烈建议大家升级 MySQL 8.0 版本,是绝对值得你去升级的好版本。

致谢

最后,还是要感谢爱可生开源社区对于《MySQL 冲冲冲》这个节目和姜老师本人的大力支持。爱可生本身是一家 MySQL 服务公司,如果大家对 MySQL 有任何问题也可以向他们寻求帮助。

下期预告

704c6fb33da438f438890db7bb04157d.gif 704c6fb33da438f438890db7bb04157d.gif

第二期话题:

“MySQL DBA 职业生涯发展规划,35 岁到底会不会被裁?”

将有神秘嘉宾与姜老师连麦互动,作为 DBA 的你不要错过哦!

同时,爱可生开源社区也会赞助本次节目的分享,每场直播都有礼物赠送。

15a0a4f5d4801ea65032b610ea2bb5d1.png

直播信息

704c6fb33da438f438890db7bb04157d.gif

直播链接:https://live.bilibili.com/22230895

或 搜索房间号:22230895

直播时间:8 月 27 日起,每周四晚 20:30 ~ 21:30

主讲人:姜承尧老师,节目嘉宾不固定

本文关键字:#直播节目# #bilibili# #mysql8#

点击“阅读原文”可以进入直播间噢~

704c6fb33da438f438890db7bb04157d.gif
DECLARE_MYSQL_PLUGIN宏的使用是用于在MySQL插件开发中声明一个自定义的MySQL插件。该宏在mysql_com.h头文件中定义。使用该宏需要在宏之后填写自定义插件的st_mysql_plugin结构的各个成员,并通过mysql_declare_plugin_end宏结束这个数组。\[1\]这个宏的使用可以参考plugin/daemon_example/daemon_example.cc文件中的例子,该例子是一个动态MYSQL_DAEMON_PLUGIN类型的插件,通过在Makefile.am文件中添加-DMYSQL_DYNAMIC_PLUGIN来定义。\[2\]这个宏的使用在MySQL 8.0.18本中引入了一个新的功能,即支持Hash Join算法。如果优化器选择没有索引的情况下,会直接使用Hash Join,这个功能比MariaDB实现的要好。\[3\] #### 引用[.reference_title] - *1* *2* [Mysql源代码分析(5): Plugin架构介绍--转载](https://blog.csdn.net/weixin_36205186/article/details/113225861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mysql 5.7支持declare_B站直播MySQL冲冲第一期文稿](https://blog.csdn.net/weixin_39671374/article/details/111699497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值