MySQL > 表不存在。但它确实(或应该)

标签 mysql exists database-table

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

但是,当我尝试从表中 SELECT 某些内容时,我收到一条错误消息,指出该表不存在。然而,这没有任何意义,因为我能够通过 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

最佳答案

以防万一有人仍然关心:

使用命令直接复制数据库目录后我遇到了同样的问题

cp -r /path/to/my/database /var/lib/mysql/new_database

如果您对使用 InnoDB 表的数据库执行此操作,您将收到上述疯狂的“表不存在”错误。

问题是您需要 MySQL 数据目录根目录中的 ib* 文件(例如 ibdata1ib_logfile0 ib_logfile1)。

当我复制这些内容时,它对我有用。

关于MySQL > 表不存在。但它确实(或应该),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7759170/

相关文章:

MySql:在 select 语句中使用 @variable 花费数百倍的时间

MySQL 查询性能帮助,许多相同的表被连接

javascript - 第二个存在条件不起作用

php - MySQL:选择随机条目,但偏重某些条目

java - 如何: Docker container running java jar connecting to host mysql server?

mysql - Codeigniter 数据库中的德语字符

php - 如何检查 var 是否存在于数据库列中,如果不存在则不执行任何操作

PHP如果一个表表行存在

Laravel 查询构建器和表名

具有多个条件的 PHP MySQL 搜索