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

当前回答

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

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

其他回答

如果表名中有句点,它将失败 SELECT * FROM poorly_name .table;

使用反勾号让它找到表 SELECT * FROM ' poorly_name .table ';

停止mysqld 备份mysql文件夹:cp -a /var/lib/mysql /var/lib/mysql- Backup 从旧机器复制数据库文件夹到/var/lib/mysql 从旧数据库覆盖ib* (ib_logfile*, ibdata) 开始mysqld 转储确保 , mysqldump > dbase.mysql 停止mysql服务 删除/var/lib/mysql 重命名/var/lib/mysql-backup为/var/lib/mysql 开始mysqld 创建数据库 Mysqldump < dbbase .mysql

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

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

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

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

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

重新启动mysql

重启mysql

现在可以访问表了。