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

当前回答

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

ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;

复制idb-file

ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;

重新启动MySql

其他回答

它可能有一个隐藏字符在你的表名。当你做表的时候,这些是不会显示出来的。你可以做一个“SHOW CREATE TABLE TABLE_ONE”和tab完成“TABLE_ONE”,看看它是否放入了任何隐藏字符。还有,你有没有试过把桌子掉下来重新做。只是为了确保特权没有问题,并且没有隐藏字符。

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

这个问题似乎与无效(损坏?)的innodb日志文件有关(至少在我的和其他几家)。一般来说,它们只是需要重新创建。

这里有一些解决方案,其中大部分需要重新启动mysql。

重新创建日志文件(删除并重新启动mysql) 调整日志文件大小(MySql 5.6+将为您重新生成文件) 如果您正在进行某种类型的数据迁移,请确保您正确地迁移了正确的文件,并按照其他人已经声明的那样赋予其权限 检查数据和日志文件的权限,确保mysql是两者的所有者 如果所有这些都失败了,您可能不得不重新创建数据库

我不知道原因,但在我的情况下,我解决了只是禁用和启用外键检查

SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=1;

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

这招对我很管用:

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

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