升级到 MySQL 8.0 的十大理由

1 . MySQL 8 .0支持无模式JSON存储,简化NoSQL应用开发。
2 . 性能大幅提升,读/写速度比MySQL 5 .7 快2 倍。
3 . 数据字典存储更可靠,DDL操作原子性,降低损坏风险。
4 . 公共表表达式提升开发效率,简化复杂查询。
5 . 窗口函数简化分析查询,保留原始数据。
6 . SQL Roles加强权限管理,角色管理更灵活。
7 . 默认字符集UTF8 MB4 ,支持全球化应用。
8 . JSON功能增强,支持动态转换和查询。
9 . 隐形索引优化维护,测试索引调整不干扰性能。
1 0. 降序索引提升查询效率,优化大数据量分析。
1 1 . 热行处理优化,减少高并发写入锁争用。
1 2 . GIS支持增强,提升空间数据索引和查询性能。
1 3 . 组复制与InnoDBCluster改进,提高集群稳定性和管理性。
1 4 . 安全加固,启用SSL/TLS加密,支持密码轮换和日志加密。
1 5 . 动态权限系统,权限管理更细粒度。
1 6 . 升级检查工具,降低迁移风险。

MySQL5.7升级8.0之前必须知道的几件事

哈,你这总结写得挺全乎啊,确实把升级前要考虑的事儿都给你列清楚了。
不过咱得聊点实际的,你这么列出来,我看着是明白了,但真到头上去干,还一堆绕弯子的事儿呢。

上周有个客户找我,就是那种典型的5 .7 老用户,非要升级8 .0。
你说这客户吧,数据量是真不小,2 01 9 年上线的系统,用的还是5 .7 .2 5 版本,说实话,这版本都老得可以了。
他那边安全组盯得特紧,说5 .7 都到EOL(End of Life)了,再不升级,万一被黑客盯上,他们得吃不了兜着走。

所以你看,第一点,安全性提升这事儿是真得提上日程。
8 .0那安全补丁确实多,我帮他在测试环境搞了个渗透测试,用那些现成的漏洞工具去戳,5 .7 直接就被打出了几个高危漏洞,吓死个人。
8 .0那边就还好,有几个中危,但都能通过打补丁解决。
这真不是吓唬人,你想想,万一真出事,数据丢了,或者被勒索了,那损失多大。

第二点,选择合适的升级版本。
你这写得很清楚,LTS稳定,创新版新。
我客户那情况,他不是技术团队,就是图省心,肯定选LTS。
我就给他选了8 .0.3 6 那个,反正也是官方推荐的稳定版。
你要是那种喜欢尝鲜的开发团队,非要去用8 .1 .x,那我劝你先在虚拟机里折腾几天,别真把生产环境搭进去。

第三点,安装包选择和glibc版本。
这事儿吧,最容易踩坑。
我之前有个项目,直接把8 .0的二进制包丢上去,结果发现系统用的glibc是2 .1 7 ,而8 .0默认那个包是2 .1 2 的,一组合就出问题,日志里全是错字。
后来没办法,得重新编译或者换包。
所以你说的,选择与当前MySQL5 .7 二进制包版本一致的8 .0安装包,这话得加粗看。
而且glibc版本,你说的选低版本确保兼容性,这没错,但得提前测试。
有些老Linux发行版,可能连2 .1 2 的glibc都装不了,那只能考虑原地升级,或者升级Linux内核。
这部分没亲历过,但听人说过,得留心。

第四点,升级步骤和注意事项。
你说的对,备份数据这步千万不能省,我见过太多次升级前没好好备份数据,升级过程中卡了,数据全完犊子。
还有版本要求,5 .7 .9 以下版本升级8 .0确实不兼容,我客户那5 .7 .2 5 就差一截。
至于升级方式,原地升级省事,但风险大,迁移升级稳妥,但就是折腾,特别是数据量大的。
我一般都建议客户用迁移升级,先在测试环境跑跑,把参数调顺了,脚本写好了,业务低峰期换,最稳妥。
但客户那时间窗口就那么点,最后还是硬着头皮原地升级了,结果...你猜怎么着?升级后查询变慢了。
原因就是8 .0默认的存储引擎参数和5 .7 不一样,得一个个改。
这真是...谁用谁知道。

最后总结一下,你写得挺好的,确实指明了升级的好处,也点明了关键点。
但实际操作起来,比纸上谈兵难得多。
特别是兼容性问题,glibc、字符集、插件这些,都得一个一个去试。
你提到的参数调整、业务测试、高可用工具,这些都是关键中的关键。
有时候你以为都准备好了,一上线就出幺蛾子,那只能现场头疼了。

反正你看着办吧,理论都懂,真动手才知道深浅。
我还在想那个客户升级后为啥慢呢,明天去帮他看看。