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

前些日子有个万年一遇的重大缺陷在社区里引发讨论,这直接导致 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中创建这么多表么?又是什么业务场景呢?欢迎留言讨论。


🌻 往期精彩 ▼


-- / END / --

👉 这里可以找到我

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

本文由 mdnice 多平台发布

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值