MySQL 8 - DROP或ALTER导致ERROR 3664(HY000):无法设置SDI

Tim*_*ury 9 mysql mysql-8.0

ERROR 3664 (HY000): Failed to set SDI 'MyDatabase.MyTable' in tablespace 'mydatabase/mytable'.
Run Code Online (Sandbox Code Playgroud)

每当尝试DROP数据库或ALTER表时,我都会遇到此错误.我无法删除或更改我创建的任何表.

现在,真正有趣的是这些错误只发生在重启MySQL和后续登录(由root用户)到MySQL之后.这是模式:

  1. 以root用户身份登录MySQL.
  2. 创建数据库并创建表.
  3. DROPALTER没有问题的数据库或表:)
  4. 退出MySQL
  5. 重启MySQL(停止然后启动)
  6. 以root用户身份登录MySQL.
  7. 尝试我之前创建DROP的数据库或ALTER表时获取ERROR 3664 ,阻碍任何DROPALTER :(

似乎重新启动MySQL允许它识别新的数据库和表更改并更新与我想要更改的数据库表和表空间相关联的某种SDI(序列化字典信息)元数据InnoDB.不知怎的,认识到这一点的SDI信息是阻碍我ALTERDROP命令.这可能是MySQL中的一个错误吗?或者,我的root用户是否有权运行修改SDI数据的命令?(尽管文档说SDI数据是由内部API修改的.)

每次我创建数据库和表时都会遇到这种情况.所以,这个错误的解决方法非常严重:

  1. 手动删除数据目录中与数据库关联的数据文件.
  2. 调用DROP DATABASE IF EXISTS MyDatabase;(可能需要注销/几次,或者重启MySQL并尝试访问带有SELECT语句的表以便最终工作)
  3. 重新创建所需的数据库和表.

任何帮助将不胜感激!谢谢!


我在Mac上运行MySQL 8.0.11社区服务器.

没有解决方案的同样问题:无法删除数据库mysql:ERROR 3664(HY000)

小智 6

我和我的几个学生已经看到这个问题越来越多。

作为一种解决方法,我发现如果您analyze table对问题数据库中的所有表进行操作,它将解决此错误,直到下次重新启动服务器为止。


Xyp*_*ron 2

这是mysql-8.0.11中的相关补丁:

https://github.com/mysql/mysql-server/commit/261981bdf42c110f08f98ad2cf84ce6fdef1949e

sdi_debug.result似乎表明

SET GLOBAL DEBUG = '-d, sdi_delete_failure';
Run Code Online (Sandbox Code Playgroud)

需要克服这个问题。