这个星球真有人在一个数据库里放10000张表(MySQL 8.4.2发布)

2024年 7月 24日 30.2k 0

前些日子有个万年一遇的重大缺陷在社区里引发讨论,这直接导致 Oracle 例外发布了 MySQL 新版本,并下架了有缺陷的版本。

7月23日,MySQL 8.0.39 / 8.4.2 LTS / 9.0.2 Innovation 版本发布,该版本修复了3个Bug。

  1. InnoDB:在某些情况下,创建大量表(8001 个或更多)后,服务器无法成功重新启动。(Bug #36808732)
  2. InnoDB:改进了启动时的表空间文件扫描性能。(Bug #110402、Bug #35200385)
  3. 组复制:在来自异步通道到组复制的源上运行 CREATE TABLE ... SELECT 语句会导致副本出现错误。(错误 #36784284)

受影响的三个版本 MySQL 8.0.38 / 8.4.1 / 9.0.0 已下架,不再提供安装包下载。

并在对应版本的发版说明中增加了如下提示:

此版本不再可供下载。由于存在严重问题,该问题可能导致服务器在创建大量表(8001 个或更多)后无法重新启动,因此已将其删除。请升级到 MySQL 8.0.39。

下面使用 MySQL 8.4.2 演示第一个Bug,验证新版本。

启动 MySQL 8.4.2 容器镜像。

podman run --name mysql-8.4.2 -p 3842:3306 \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='1' \
-d mysql:8.4.2 --log-error-verbosity=3

执行测试脚本,生成10000张表。

[shawnyan@ol9 ~]$ ./gen_10000_tables.sh
Checking MySQL connection...
Creating database if it doesn't exist...
Completed creating 10000 tables out of 10000.

确认表的数量。

(root@127.0.0.1) [(none)] 10:18:05> SELECT COUNT(*)
-> FROM information_schema.tables
-> WHERE table_schema = 'test';
+----------+
| COUNT(*) |
+----------+
| 10000 |
+----------+
1 row in set (0.02 sec)

重启容器,并查看日志。

podman stop mysql-8.4.2
podman start mysql-8.4.2
podman logs mysql-8.4.2

可以看到,该版本在创建10000张表之后,可以正常重启动。

2024-07-24T01:48:31.065241Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2024-07-24T01:48:31.357450Z 0 [Note] [MY-013932] [Server] BuildID[sha1]=a6fd834122e5831891bf73c08fa3b15d60cc914a
2024-07-24T01:48:31.357473Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.4.2) starting as process 1
2024-07-24T01:48:31.366601Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-07-24T01:48:31.431698Z 1 [Note] [MY-012207] [InnoDB] Using 2 threads to scan 10002 tablespace files
2024-07-24T01:48:33.498219Z 1 [Note] [MY-012208] [InnoDB] Completed space ID check of 10004 files.
2024-07-24T01:48:34.445816Z 1 [Note] [MY-012976] [InnoDB] 8.4.2 started; log sequence number 188559023
2024-07-24T01:48:34.446808Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-07-24T01:48:34.470979Z 1 [Note] [MY-011089] [Server] Data dictionary restarting version '80300'.
2024-07-24T01:48:34.623204Z 1 [Note] [MY-012357] [InnoDB] Reading DD tablespace files
2024-07-24T01:48:35.405717Z 1 [Note] [MY-012356] [InnoDB] Scanned 10006 tablespaces. Validated 10006.
2024-07-24T01:48:35.427433Z 1 [Note] [MY-010006] [Server] Using data dictionary with version '80300'.
2024-07-24T01:48:35.678606Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2024-07-24T01:48:35.678665Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.4.2' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.

那么,

你会在MySQL中创建这么多表么?又是什么业务场景呢?欢迎留言讨论。

🌻 往期精彩 ▼

  • [Oracle]
    • Oracle 数据库全面升级为 23ai
    • python-oracledb 已率先支持 Oracle 23ai
    • 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
  • [MySQL]
    • MySQL 9.0 的 VECTOR 文档更新
    • MySQL 9.0.0 新鲜出炉!支持向量类型
    • 「合集」MySQL 8.x 系列文章汇总
    • 如何选择适合的 MySQL Connector/J 版本
  • [TiDB]
    • 星辰考古:TiDB v4.0 进化前夜
    • 国产基础软件“出海”标杆炼成记
    • 敢于公布BUG的国产数据库才是好数据库
  • [PG]
    • [RL9] Rocky Linux 9.4 搭载 PG 16.1
    • 即将告别PG 12,建议升级到PG 16.3版本
    • 后 EL 7 时代,PG 16 如何在 CentOS 7 上运行

– / END / –

👉 这里可以找到我

  • 微信公众号:少安事务所
  • 墨天轮:严少安
  • PGFans: 严少安
  • ITPUB:少安事务所
  • TiDB 专栏:@ShawnYan

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论