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

标签 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

想法?这对我来说没有任何意义。

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

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

更新:使用根帐户而不是特定用户帐户时结果相同。

更新:我也无法重新创建表格。

CREATE TABLE `analytics`.`project_share_invite` ( ... )
ERROR 1146 (42S02): Table 'analytics.project_share_invite' doesn't exist

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

InnoDB: Load table 'analytics/project_share_invite' failed, the table has missing foreign key indexes. 

虽然我不知道它是怎么变成这个状态的。

最佳答案

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

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

SET FOREIGN_KEY_CHECKS=0;

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

然后使用CREATE INDEX重新创建丢失的索引。

关于MySQL 无法从现有表中进行选择,因为它不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044967/

相关文章:

mysql - 如何通过 MySQL 中的父表 ID 获取多个组的平均值

mysql - '0' 中的未知列 'field list'?

MySQL 将全局变量应用于打开的 session

php - 如何从表中获取数据,以日期为键并对应数据?

php - Laravel Eloquent 困难关系查询

mysql - 多个 MySQL 表 JOINs/id-to-value 替换/别名

MySQL 使用 STORAGE MEMORY 子句创建表

php - Codeigniter simple_query 与查询生成器(插入、更新和删除)

mysql - 将出现的单词存储在 MySQL 表中

mysql - Sql SELECT 分组依据和顺序