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

当前回答

我在窗户上也遇到了同样的问题。 除了复制ib*文件和thd data目录下的mysql目录,我还必须匹配my.ini文件。

我之前安装的my.ini文件没有下面这行:

innodb-page-size=65536

但我的新装置做到了。可能是因为我在旧的安装程序中没有这个选项。 我删除了它并重新启动了服务,表按预期工作。 简而言之,确保新的my.ini文件是旧文件的副本,唯一的例外是datadir、plugin-dir和port#,这取决于您的新安装。

其他回答

好吧,这听起来很荒谬,但请迁就我。 对我来说,当我把我的陈述改为这样时,问题就解决了:

SELECT * FROM `table`

我做了两个改动 1)。使表名小写-我知道!! 2)。使用特定的引号符号= ':它是标签上方的键

这个解决方案听起来很荒谬,但它很有效,而且现在是周六晚上,我从早上9点就开始工作了-所以我接受了:)

祝你好运。

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

停止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

下面是另一个场景(版本升级):

我重新安装了我的操作系统(Mac OS El Captain),并安装了一个新版本的mysql(使用自制软件)。安装的版本(5.7)恰好比我之前的版本更新。然后复制表,包括ib*文件,并重新启动服务器。我可以看到mysql工作台中的表,但当我尝试选择任何东西时,我得到“表不存在”。

解决方案:

停止mysql服务器,例如mysql。服务器停止或酿造服务停止mysql 使用mysqld_safe——user=mysql——datadir=/usr/local/var/mysql/启动服务器(根据需要更改路径) 运行mysql_upgrade -u root -p password(在另一个终端窗口) 关闭运行中的服务器mysqladmin -u root -p password shutdown 以正常模式重新启动服务器。服务器启动或酿造服务启动mysql

相关文件在这里。

请运行查询:

SELECT 
    i.TABLE_NAME AS table_name, 
    LENGTH(i.TABLE_NAME) AS table_name_length,
    IF(i.TABLE_NAME RLIKE '^[A-Za-z0-9_]+$','YES','NO') AS table_name_is_ascii
FROM
    information_schema.`TABLES` i
WHERE
    i.TABLE_SCHEMA = 'database'

不幸的是,MySQL允许在表名中使用unicode和非打印字符。 如果你通过复制一些文档/网站的create代码来创建你的表,那么它可能在某个地方有零宽度空间。