不测试就推行新版本?MySQL 8.0x 到 9.0 均可能崩溃
qiyuwang 2025-04-29 03:44 7 浏览 0 评论
作者介绍
刘华阳,20年经历风霜雨打的 DBA,5年的 DBA 架构和团队管理经验,只要是数据库都喜欢学习。PostgreSQL ACE,MongoDB 狂热者,10年的 MYSQL 工作经验,现在在玩 POLARDB 与时俱进。
最近看一些友人都在发MySQL9的新功能,很想查查有什么新鲜的东西,但不查不要紧,一查吓一跳。MySQL 8.038 ,8.4.1, 9.0 均存在大BUG,并挖出大瓜,某国内云厂商内核开发在MYSQL BUG List 质问甲骨文MYSQL,为什么这么简单的问题连测试都不测试就上线推新版本。
根据Percona的BLOG中的文章显示,当前他们发现MYSQL 8.037后面的版本均存在BUG,当表的数量超过 10000 张后,对应版本的MYSQL会系统崩溃,并进行重启。当前发现的 8.038, 8.4.1, 9.0 均存在此问题。
这再次提醒使用开源数据库的公司和人员,不要在开源数据库上新后,就马上进行追随,升级现有的数据库系统的版本,具体稳妥的方式为,在开源数据库上新1年后,在进行数据库版本的计划的升级。终究数据库升级不是儿戏,也不是越新越好,稳定性才是最重要。
其他开源数据库也发生过类似的一些事情,如POSTGRESQL 14版本在初期在线添加索引,导致丢失数据的问题等。
更多具体的信息参见:
https://perconadev.atlassian.net/browse/PS-9306
另某云厂商 RDS 核心团队的成员 Huaxiong Song,报告了此次问题给MYSQL官方,具体的翻译内容如下
我从 Percona 的博客中了解到了 bug#115517,这是一个严重的问题,尚未完全经过测试。实际上,这个 bug 的原因非常简单:当数字超过 8000 时,InnoDB 会调用多个线程进行检查,而主线程以外的线程的 THD 未初始化,导致在 commit#28eb1ff 引入的修复中对 DD 的访问异常。
但我想谈谈其他问题。
这是一个并发函数,但测试用例并未涵盖它。这种设计的合理性值得怀疑。我对 MySQL InnoDB 大型表的启动进行了大量测试和研究。获取 DD 信息并不是一项非常快速的行为。以我的测试数据为例:100 万个表(sysbench 构建),正常关闭和重新启动,启动时间如下:Tablespace_dirs::scan() - 44.4 秒 fetch_global_components(&tablespaces) - 25.5 秒 validate(tablespaces) - 15.8 秒 总计 - 90.7 秒 我们可以发现,fetch_global_components(&tablespaces) 占据了启动时间的 28%,而这个函数是用来读取 DD::tablespace 表并构建 DD::tablespace 对象的。
在引入 commit#28eb1ff 后,忽略 bug#115517,我们可以假设除了获取所有表空间外,还需要获取所有 DD::table。与获取 DD::tablespace 不同,获取 DD::table 将更耗资源,因为每次获取都需要构建和销毁 Auto_releaser 对象。(尽管引入了多线程,我认为问题仍然存在)。对于函数
dict_name::parse_tablespace_path,我认为这个函数值得单独讨论:3.1 我认为将 std::string path 传递给函数并不理想。我认为 const std::string &path 更为合适。3.2 函数中使用了 SUB_PART_SEPARATOR 和 PART_SEPARATOR,但由于历史原因,分区和子分区的分隔符也可能是 #P# 和 #SP#。显然,这个函数无法处理这个问题。让我们回到 Validate_files::check 函数。在 parse_tablespace_path 之后,实际上调用了 fil_update_partition_name 来处理我上面提到的分区分隔符问题。因此,
dict_name::parse_tablespace_path 的设计和使用并不完全合理。
作者丨 liuaustin3
来源丨公众号:AustinDatabases(ID:AustinDatabases)
*仅为提供参考和学习交流,不代表dbaplus社群立场!dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
相关推荐
- 在Windows 10下安装配置MySQL数据库
-
MySQL了是一款比较不错的免费版本的数据库,现在已属于Oracle旗下产品。现已成为比较流行的关系型数据库。该产品大都被安装在Linux的操作系统下。现大都是使用Windows的操作系统,为了方...
- 2022年MySQL最新面试题 - MySQL数据库基础知识
-
0、概要1、平时MySQL主要用哪个版本2、数据库三大范式是什么...
- 不测试就推行新版本?MySQL 8.0x 到 9.0 均可能崩溃
-
作者介绍...
- Mysql8忘记密码/重置密码
-
Mysql8忘记密码/重置密码UBUNTU下Mysql8忘记密码/重置密码步骤如下:先说下大概步骤:修改配置文件,使得用空密码可以进入mysql。然后置当前root用户为空密码。再次修改配置文件,不能...
- 新手教程,Linux系统下MySQL的安装
-
看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...
- 介绍 9 款 MySQL 常见的图形化工具,第三款我用了 10 年
-
MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考。MySQL是一个非常流行的小型关系型数据库...
- MySQL 表分区?涨知识了
-
1.什么是表分区...
- 修改编码格式MySQL
-
修改字符集的方法,就是使用mysql的命令mysql>SETcharacter_set_client=utf8;mysql>SETcharacter_set_connec...
- Django连接数据库、执行migrate数据结构更改操作
-
本篇笔记目录索引如下:Django连接mysql,执行数据库表结构迁移步骤介绍操作数据库,对数据进行简单操作接下来几篇笔记都会介绍和数据库相关,包括数据库的连接、操作(包括增删改查)、对应的字段类型...
- 第35期:MySQL 数据垂直拆分
-
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。...
- mysql一 基本操作
-
先讲数据库--mysql、redis、MongoDB爬虫今天的内容:mysql一基本操作注意事项:1.安装:自己安装,有问题可以问老师、可以自己找办法解决2.上课:先讲知识点再回答问题3....
- MySQL数据实时增量同步到Elasticsearch
-
Mysql到Elasticsearch的数据同步,一般用ETL来实现,但性能并不理想,目前大部分的ETL是定时查询Mysql数据库有没有新增数据或者修改数据,如果数据量小影响不大,但如果几百万上千万的...
- 怎样快速地迁移 MySQL 中的数据?
-
MySQL数据库是一个常见的关系型数据库,在实际应用中,可能需要将数据从一个MySQL数据库迁移到另一个MySQL数据库,或将MySQL数据库中的数据迁移到其他类型的数据库。以下是一些快...
- 金柿子变成了“金疙瘩”
-
文化扶贫在行动【金柿子变成了“金疙瘩”】“一级的柿子酿酒,二级的柿子酿醋”,在陕西省永寿县云集生态园区,这里形成以柿子产业链为主导的多元化发展格局,涵盖柿子酒100吨、柿子醋500吨、荞麦醋1000吨...
- 二胎妈妈怀孕7月体重超400斤 无医院接收愁煞人
-
女人怀孕后一般体重都会增加,可是你想象过孕妇体重增长到400多斤会是什么样子吗?安徽阜阳的杨女士今年28岁,她前不久到医院检查时,发现自己已经怀孕5个月了。知道自己意外怀孕后,杨女士本来是不打算要的,...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)