我更改了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

当前回答

对我来说有效的方法是扔掉桌子,即使它根本不存在。然后,我重新创建了表,并从以前完成的sql转储中重新填充。

一定有一些表名的元数据库,它很可能仍然存在,直到我删除它。

其他回答

在升级WAMP但没有数据库备份后,我遇到了这个问题。

这招对我很管用:

停止新的WAMP 从旧WAMP安装中复制所需的数据库目录和ibdata1文件 删除“ib_logfile0”和“ib_logfile1” 开始里面

现在应该能够对数据库进行备份了。但是,当您的服务器重新启动后,您仍然会遇到问题。所以现在重新安装WAMP并导入数据库。

mysqldump到数据库: mysqldump -u user -ppass dbname > D:\ backup -up \dbname.sql 恢复数据库 mysql -u user -ppass dbname < D:\ backup -ups\dbname.sql

现在数据库中的所有表都完全恢复了。试一试. .

SELECT * FROM dbname.tablename;

在复制idb-file之前,尝试使用sql查询来丢弃表空间:

ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;

复制idb-file

ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;

重新启动MySql

对我来说,在Mac OS (MySQL DMG安装),一个简单的重启MySQL服务器解决了这个问题。我猜是冬眠造成的。

今天遇到了同样的问题。这是一个mysql的“标识符大小写敏感性”问题。

请检查相应的数据文件。很有可能文件系统上的文件名是小写的,而“show tables”命令中列出的表名是大写的。如果系统变量"lower_case_table_names"为0,查询将返回"table not exist",因为当"lower_case_table_names"为0时,名称比较是区分大小写的。