我更改了MySQL安装的datadir,所有的基都正确移动,除了一个。 我可以连接和使用数据库。SHOW TABLES还正确地返回所有表,并且每个表的文件都存在于MySQL数据目录中。

然而,当我试图从表中选择某些东西时,我得到一个错误消息,该表不存在。然而,这没有意义,因为我能够通过show TABLES语句显示同一个表。

我的猜测是SHOW TABLES列出了文件的存在,但不检查文件是否损坏。因此,我可以列出这些文件,但不能访问它们。

然而,这只是一种猜测。我以前从未见过这个。现在,我无法重新启动数据库进行测试,但使用它的其他所有应用程序都运行正常。 但这只是猜测,我从来没见过。

有人知道为什么会这样吗?

例子:

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database    |
+-----------------------+
| TABLE_ONE             |
| TABLE_TWO             |
| TABLE_THREE           |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist

当前回答

另一个我认为值得在这里提出的答案(因为我带着同样的问题来到这里,而这对我来说就是答案):

再次检查查询中的表名是否与数据库中的表名拼写完全相同。

这是一个很明显的,新手的事情,但是像“user”和“users”这样的东西会让人出错,我认为在这里列出这个答案会很有帮助。:)

其他回答

当将lower_case_table_names设置为1,然后试图访问使用该变量的默认值创建的表时,也会发生此错误。在这种情况下,您可以将其恢复到以前的值,您将能够读取表。

在重新安装MySQL后,我遇到了同样的问题,似乎在安装过程中,一些存储关于InnoDB日志文件数据的配置文件,这些文件ib_logfile*(它们是日志文件对吧?),被覆盖了。为了解决这个问题,我删除了ib_logfile*文件。

幽灵桌也有类似的问题。幸运的是,在失败之前有一个SQL转储。

就我而言,我必须:

停止mySQL 将/var/mysql中的ib*文件移至备份 删除/var/mysql/ {dbname} 重新启动mySQL 重新创建空数据库 恢复转储文件

注意:需要转储文件。

仅从旧数据目录复制ibdata1文件。不要复制ib_logfile1或ib_logfile0文件。这将导致MySQL不再启动。

我也遇到了同样的问题,我找了2-3天,但这个解决方案对我来说真的很愚蠢。

重新启动mysql

重启mysql

现在可以访问表了。