ERROR 3664 (HY000): Failed to set SDI 'MyDatabase.MyTable' in tablespace 'mydatabase/mytable'.
每当我试图 DROP
数据库或 ALTER
一张table。我无法删除或更改我创建的任何表。
现在,真正有趣的是,这些错误只有在重新启动mysql并随后(由root用户)登录mysql之后才会发生。模式如下:
以root用户身份登录mysql。
创建数据库并创建表。 DROP
数据库或 ALTER
没有问题的表:)
退出mysql
重新启动mysql(先停止,然后启动)
以root用户身份登录mysql。
尝试删除时出现错误3664 DROP
数据库或 ALTER
我以前创建的表 DROP
或者 ALTER
:(
似乎mysql的重新启动允许它识别新的数据库和表更改,并更新与我的数据库相关联的某种sdi(序列化字典信息)元数据 InnoDB
我要更改的数据库表和表空间。不知何故,这种对sdi信息的认知妨碍了我的工作 ALTER
以及 DROP
命令。这可能是mysql中的错误吗?或者,我的根用户是否有权运行修改sdi数据的命令(不过,文档中说sdi数据是由内部api修改的。)
每次创建数据库和表时都会发生这种情况。所以,我对这个错误的解决方法是:
手动删除数据目录中与数据库关联的数据文件。
呼叫 DROP DATABASE IF EXISTS MyDatabase;
(可能需要注销/登录几次,或者重新启动mysql并尝试使用 SELECT
声明(最终有效)
重新创建所需的数据库和表。
任何帮助都将不胜感激!谢谢您!
我正在mac上运行MySQL8.0.11社区服务器。
同样的问题没有解决方案:无法删除数据库mysql:error 3664(hy000)
5条答案
按热度按时间kx7yvsdv1#
我和我的几个学生看到这个问题越来越多。
作为一个解决办法,我发现如果你进去做一个
analyze table
在问题数据库中的所有表上,它将修复此错误,直到下次重新启动服务器。qlckcl4x2#
问题与外键有关。此语句失败:
但是如果我去掉key和constraint子句,它就可以工作了。
在创建之后,我必须使用altertable添加这些键。
至少可以说很烦人。
c0vxltue3#
fwiw,我在尝试时遇到相同的“设置sdi失败”错误:
在我的例子中,table引擎是
InnoDB
以及MyISAM
. 他们应该都是InnoDB
当我切换它们并重新启动mysql服务器时,一切似乎都正常了。有各种各样的
.sdi
mysql数据目录中的文件(/usr/local/mysql/data/MyDb/
在我的机器上)。。。这只是一个简单的问题json
包含与特定表相关的元数据的文件。这些sdi文件似乎只存在于myisam表中。在我意识到这一点之前,我认为特定表的sdi文件肯定丢失了,或者是什么,结果发现mysql有一个
ibd2sdi
实用程序,可以从表中创建sdi文件ibd
文件(也在数据目录中)。如果你需要坚持
MyISAM
也许值得一看。但是,在修改sdi文件的内容时要小心,因为我在mysql worklogs中遇到了以下引用:执行此操作时必须非常小心-与.myd和.myi文件中存储的内容不兼容的更改(如更改列的数据类型)可能会带来灾难性后果,必须避免。
不知道这是否有用,但我想和大家分享一下。
piztneat4#
如果清空所有表,则可以删除模式。
有趣的是,如果在php中使用pdo,则该语句可以工作
4ktjp1zp5#
这是mysql-8.0.11中的相关修补程序:
https://github.com/mysql/mysql-server/commit/261981bdf42c110f08f98ad2cf84ce6fdef1949e
sdi\u debug.result似乎表明
是克服这个问题所需要的。