MySQL>表不存在。 但它确实(或它应该)
我确实更改了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
30个解决方案
233 votes
万一有人还在乎:
使用命令直接复制数据库目录后,我遇到了同样的问题
cp -r /path/to/my/database /var/lib/mysql/new_database
如果你使用一个使用ib*表的数据库,你会得到上面提到的这个疯狂的“表不存在”错误。
问题是您需要MySQL数据库的根目录中的ib*文件(例如ibdata1,2242762929398492162和ib_logfile1)。
当我复制那些它为我工作。
Mike Dacre answered 2019-03-03T12:39:41Z
38 votes
对于我在Mac OS(MySQL DMG安装)上,简单重启MySQL服务器解决了这个问题。 我猜测冬眠导致了它。
Martin answered 2019-03-03T12:40:11Z
23 votes
当我正在使用的表名的情况关闭时,我得到了这个问题。 所以table被称为'db',但我在select语句中使用'DB'。 确保案例相同。
dkinzer answered 2019-03-03T12:40:42Z
22 votes
将lower_case_table_names设置为1,然后尝试访问使用该变量的默认值创建的表时,也会发生此错误。 在这种情况下,您可以将其还原为以前的值,您将能够读取该表。
golimar answered 2019-03-03T12:41:12Z
14 votes
停止mysqld
backup mysql文件夹:mysqldump < dbase.mysql
将数据库文件夹从旧机器复制到mysqldump < dbase.mysql
从旧数据库覆盖ib *(ib_logfile *,ibdata