我更改了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文件时,我得到了一个错误,比如创建表查询的表不存在。

我意识到在我的数据库名中有一个下划线,mysql在这之前放了一个转义字符。

所以我删除了数据库名称中的下划线,一切都解决了。

希望这也能帮助到其他人。

其他回答

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

在我的情况下,当我导入导出的sql文件时,我得到了一个错误,比如创建表查询的表不存在。

我意识到在我的数据库名中有一个下划线,mysql在这之前放了一个转义字符。

所以我删除了数据库名称中的下划线,一切都解决了。

希望这也能帮助到其他人。

我也遇到了同样的问题,但这不是由于一个隐藏的字符或“薛定谔表”。问题(与上面所述的完全相同)出现在恢复过程之后。我使用的是MySQL管理员版本1.2.16。当必须执行还原时,必须在目标模式中取消选中ORIGINAL,并从下拉框中选择数据库的名称。之后问题就解决了。至少在我的数据库里是这样的。

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

这招对我很管用:

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

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

我在新电脑上安装了MariaDB, 停止Mysql服务 重命名数据文件夹为data- 我解决了复印的问题 Mysql\data\table_folders和ibdata1 从崩溃的高清MySql数据文件夹到新安装的MySql数据文件夹。

我跳过了ib_logfile0和ib_logfile1(否则服务器没有启动服务)

启动mysql服务。

然后服务器正在运行。