MySQL无法从现有表中进行选择,因为它不存在?

And*_*age 3 mysql

我不知道发生了什么事.我有一张叫做的桌子project_share_invite.几个小时前(在我们的生产环境中)我不能再对这个表发出SELECT.MySQL声称该表不存在,尽管它显示在上面show tables.今天在机器上发生的唯一值得注意的事件是例行程序包升级(通过apt).

mysql> use analytics;
Database changed

mysql> show tables like 'project_share_invite';
+--------------------------------------------+
| Tables_in_analytics (project_share_invite) |
+--------------------------------------------+
| project_share_invite                       |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select count(*) from project_share_invite;
ERROR 1146 (42S02): Table 'analytics.project_share_invite' doesn't exist
Run Code Online (Sandbox Code Playgroud)

想法?这对我没有任何意义.

更新:表的文件仍然存在于磁盘上(project_share_invite.frmproject_share_invite.idb分别)并且其中包含内容.

MySQL的快速重启并没有解决这个问题.

更新:使用root帐户而不是特定用户帐户时的结果相同.

更新:我也无法重新创建表.

CREATE TABLE `analytics`.`project_share_invite` ( ... )
ERROR 1146 (42S02): Table 'analytics.project_share_invite' doesn't exist
Run Code Online (Sandbox Code Playgroud)

更新:应该先检查错误日志:

InnoDB: Load table 'analytics/project_share_invite' failed, the table has missing foreign key indexes. 
Run Code Online (Sandbox Code Playgroud)

虽然我不知道它是如何在这种状态下得到的.

gvi*_*iew 9

看起来你在MySQL中遇到存在外键约束的已知错误,但关联的索引被删除了.请参阅:http: //bugs.mysql.com/bug.php?id = 68148

根据MySQL的版本(似乎您需要5.6或>),您可以通过关闭外键检查然后重新创建缺失的索引来解决此问题.

SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)

您应该使用SHOW CREATE TABLE检查结构 table name

然后使用CREATE INDEX重新创建缺少的索引.

  • 注意:该错误已标记为已修复,但修复仅阻止您删除索引。如果您使用“FOREIGN_KEY_CHECKS=0”设置进行更改,您仍然可能会遇到这种情况。在更改一个数据库上的字符集并忘记存在跨数据库外键后,我们成功地在 MySQL 5.7.28 上遇到了这一问题。 (2认同)
  • 即使将foreign_key_checks设置为0后,mysql也不允许我执行`SHOW CREATE TABLE`查询。查询最终出现以下错误:“引擎中不存在该表。”。请帮我解决这个问题。 (2认同)