MySQL 8执行DROP/ALTER触发ERROR 3664问题求助
求助:MySQL 8.0.11 出现 ERROR 3664 无法删除/修改自建表
我最近碰到一个棘手的MySQL问题,每次执行DROP数据库或者ALTER表操作时都会触发以下错误:
ERROR 3664 (HY000): Failed to set SDI 'MyDatabase.MyTable' in tablespace 'mydatabase/mytable'.
更奇怪的是,这个错误仅在重启MySQL并以root用户重新登录后才会出现,具体的触发规律我整理如下:
- 以root用户登录MySQL;
- 创建数据库及数据表;
- 此时执行
DROP数据库或ALTER表操作完全正常 😊; - 退出MySQL;
- 重启MySQL(先停止再启动);
- 再次以root用户登录MySQL;
- 尝试执行
DROP之前创建的数据库或ALTER表时,就会触发ERROR 3664,操作完全无法完成 😞
我猜测,重启MySQL后系统会识别新的库表变更,更新和InnoDB库表、表空间相关的**SDI(Serialized Dictionary Information)**元数据,但这种SDI的识别反而阻碍了ALTER和DROP命令的执行。我现在很困惑:这会不会是MySQL的Bug?还是说root用户居然没有修改SDI数据的权限?(虽然官方文档说SDI数据是由内部API修改的)
这个问题每次创建库表都会出现,我目前只能用一个非常繁琐的临时方案解决:
- 手动删除数据目录中与该数据库关联的数据文件;
- 执行
DROP DATABASE IF EXISTS MyDatabase;(有时候需要多次登录/退出,或者重启MySQL后执行SELECT语句才能生效); - 重新创建需要的数据库和表。
恳请各位大佬帮忙指点,谢谢!
补充信息:我在Mac系统上运行的是MySQL 8.0.11社区版,目前在相关技术社区也暂未找到公开的解决方案。
内容的提问来源于stack exchange,提问作者Tim Arterbury
相关产品推荐
相关产品推荐

