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)

启动mysqld

转储数据库

mysqldump < dbase.mysql

停止mysql服务

删除mysqldump < dbase.mysql

将mysqldump < dbase.mysql重命名为/var/lib/mysql

启动mysqld

创建数据库

mysqldump < dbase.mysql

user1772382 answered 2019-03-03T12:43:07Z

12 votes

请运行查询:

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和不可打印的字符。如果您通过从某个文档/网站复制创建代码来创建表,那么它有可能在某处具有零宽度空间。

dev-null-dweller answered 2019-03-03T12:43:41Z

9 votes

我在这场噩梦上度过了三天。 理想情况下,您应该有一个可以恢复的备份,然后只需删除损坏的表。 这些类型的错误可能导致您的ibdata1变大(适用于适度表格的100GB +大小)

如果你没有最近的备份,例如你依赖mySqlDump,那么你的备份可能会在过去的某个时候默默地破坏。 您将需要导出数据库,这当然是您无法做到的,因为在运行mySqlDump时您将遇到锁定错误。

因此,作为解决方法,请转到mysql has gone away并删除table_name。*

然后立即尝试转储表; 这样做现在应该有效。 现在将数据库还原到新数据库并重建丢失的表。 然后转储损坏的数据库。

在我们的案例中,我们也经常在所有数据库上随机获取mysql has gone away条消息; 一旦损坏的数据库被删除,一切都恢复正常。

Andy answered 2019-03-03T12:44:42Z

8 votes

我有同样的问题,我搜索了2-3天,但对我来说解决方案真的很愚蠢。

重启mysql

$ sudo service mysql restart

现在表变得可访问了。

Siraj answered 2019-03-03T12:45:31Z

7 votes

在复制idb-file之前尝试运行sql查询以丢弃表空间:

ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;

复制idb文件

ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;

重启MySql

l0pan answered 2019-03-03T12:46:14Z

7 votes

好。 这听起来很荒谬,但幽默我。

对我来说,当我将声明更改为此时问题得到了解决:

SELECT * FROM `table`

我做了两处改动

1.)使表名小写 - 我知道!!

2.)使用特定的引号=`:它是你的TAB上方的键

解决方案确实听起来很荒谬,但它确实有效,而且是星期六晚上,我从上午9点开始工作 - 所以我会接受它:)

祝好运。

PlanetUnknown answered 2019-03-03T12:47:27Z

5 votes

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

JCM answered 2019-03-03T12:47:56Z

5 votes

与幽灵表有类似的问题。 谢天谢地,在失败之前有一个SQL转储。

在我的情况下,我不得不:

停止mySQL

将ib *文件从/var/mysql移至备份

删除/var/mysql/{dbname}

重启mySQL

重新创建空数据库

恢复转储文件

注意:需要转储文件。

Oli Stockman answered 2019-03-03T12:49:24Z

5 votes

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

这对我有用:

停止新的WAMP

从旧的WAMP安装中复制您需要的数据库目录和ibdata1文件

删除ib_logfile0和ib_logfile1

启动WAMP

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

ykay answered 2019-03-03T12:50:32Z

3 votes

什么对我有用,只是放弃了桌子,即使它不存在。 然后我重新创建了表并从之前完成的sql dump中填充。

必须有一些表名的元数据库,并且它很可能仍然存在于那里直到我删除它。

Zoobra McFly answered 2019-03-03T12:51:10Z

2 votes

我在新电脑上安装了MariaDB,停止了Mysql服务将数据文件夹重命名为数据 - 我刚刚解决了我的问题Mysql \ data \ table_folders和ibdata1从崩溃的HD MySql数据文件夹到新安装的mysql数据文件夹。

我跳过了ib_logfile0和ib_logfile1(否则服务器没有启动服务)

启动mysql服务。

然后服务器正在运行。

Tony answered 2019-03-03T12:52:06Z

2 votes

似乎问题(至少在我和其他一些人中)与无效(腐败?)innodb日志文件有关。 一般来说,他们只需要重新创建。

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

重新创建日志文件(删除并重启mysql)

调整日志文件的大小(MySql 5.6+将为您重新生成文件)

如果您正在进行某种类型的数据迁移,请确保已正确迁移正确的文件并赋予其权限,因为其他人已经声明

检查数据和日志文件的权限,mysql是两者的所有者

如果所有其他方法都失败了,您可能需要重新创建数据库

SeanDowney answered 2019-03-03T12:53:24Z

2 votes

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

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

解:

停止mysql服务器,例如 mysql.server stop或mysql.server start

使用mysql.server start启动服务器(根据需要更改路径)

运行mysql.server start(在另一个终端窗口中)

关闭正在运行的服务器mysql.server start

以正常模式mysql.server start或brew services start mysql重新启动服务器

相关文档在这里。

Roman Kutlak answered 2019-03-03T12:55:08Z

2 votes

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

SET FOREIGN_KEY_CHECKS=0;

SET FOREIGN_KEY_CHECKS=1;

Bruno Caponi answered 2019-03-03T12:55:50Z

2 votes

对数据库执行mysqldump:

mysql -u user -ppass dbname < D:\Back-ups\dbname.sql

恢复数据库

mysql -u user -ppass dbname < D:\Back-ups\dbname.sql

现在,数据库中的所有表都已完全恢复。 尝试..

SELECT * FROM dbname.tablename;

Zaw Htoon answered 2019-03-03T12:56:56Z

1 votes

您可能在表名中有一个隐藏的字符。 当你做表演时,那些不会出现。 你能做一个“SHOW CREATE TABLE TABLE_ONE”并选项卡完成“TABLE_ONE”,看它是否放入任何隐藏的字符。 此外,你有没有尝试删除和重新制作表格。 只是为了确保权限没有任何问题,并且没有隐藏的字符。

Hoopdady answered 2019-03-03T12:57:29Z

1 votes

Time Machine备份导入后的相同问题。 我的解决方案是停止MySQL服务器并修复ib *文件的读写权限。

user3415481 answered 2019-03-03T12:58:02Z

1 votes

我认为另外一个答案值得在这里提出(因为我带着同样的问题来到这里,结果证明这是我的答案):

仔细检查查询中的表名拼写与数据库中的表名完全相同。

一种显而易见的新手,但“用户”和“用户”之类的东西可以让人吵起来,我认为这将是一个有用的答案。:)

vazor answered 2019-03-03T12:59:17Z

1 votes

在我的情况下,当我导入导出的sql文件时,我收到的错误就像创建表查询不存在表。

我意识到我的数据库名称中有一个下划线,而mysql在此之前放置了一个转义字符。

所以我删除了数据库名称中的下划线,一切顺利。

希望它也可以帮助其他人。

Onur Kucukkece answered 2019-03-03T13:00:25Z

1 votes

在我的情况下,它是SQLCA.DBParm参数。

我用了

SQLCA.DBParm = "Databse = "sle_database.text""

但它一定是

SQLCA.DBParm = "Database='" +sle_database.text+ "'"

解释:

您将组合三个字符串:

1. Database=' - "Database='"

2. (name of the database) - +sle_database.text+

3. ' - "'" (means " ' " without space)

不要在quatermarks中使用空格。感谢我的同事Jan.

Marek answered 2019-03-03T13:01:44Z

1 votes

请访问:xampp\mysql\data\dbname

dbname里面有tablename.frm和tablename.ibd文件。

去掉它并重新启动mysql并再试一次。

Abu Sufian answered 2019-03-03T13:02:36Z

1 votes

在我的情况下,我已经在表上定义了一个触发器,然后尝试在表中插入行。 似乎,某种程度上触发是错误的,因此插入是错误的,表不存在。

Yogesh Kumar Gupta answered 2019-03-03T13:03:09Z

1 votes

从旧数据目录中仅复制ibdata1文件。 请勿复制ib_logfile1或ib_logfile0文件。 这将导致MySQL不再启动。

Plabon Dutta answered 2019-03-03T13:03:45Z

1 votes

今天遇到了同样的问题。 这是一个mysql“Identifier Case Sensitivity”问题。

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

Hudson Liang answered 2019-03-03T13:04:28Z

0 votes

我有同样的问题,但这不是由于一个隐藏的角色或“schroedinger的桌子”。 在恢复过程之后出现问题(完全如上所述)。 我正在使用MySQL管理员版本1.2.16。 必须执行还原时,必须在目标架构中取消选中ORIGINAL,然后从下拉框中选择数据库的名称。 之后问题得到解决。 至少那是我数据库中的原因。

OSCAR answered 2019-03-03T13:05:09Z

0 votes

如果表名中有句号,则表示失败SELECT * FROM `poorly_named.table`;

使用反引号来查找表格SELECT * FROM `poorly_named.table`;

Chris answered 2019-03-03T13:05:50Z

mysql表不存在_MySQL表不存在。 但它确实(或它应该)相关推荐

  1. mysql 表空间收缩_mysql表碎片清理和表空间收缩

    mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式) OPTIMIZETABLE [tablename],当然这种方式只 ...

  2. mysql right join实例_MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    LEFT JOIN 语法用法与实例MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT ...

  3. mysql表和表的关系_mysql表与表之间建关系

    2.浪费硬盘空间 3.扩展性极差 上述的弊端产生原因类似于把代码全部写在一个py文件中,应该怎么做?  >> 解耦合! 将上述两张表拆成员工的部门两张表 分析表数据之间的关系:多个员工对应 ...

  4. mysql 表结构关系_mysql 表关系 与 修改表结构

    mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...

  5. mysql中修改表结构语法_MySQL表结构修改详解

    MySQL修改表的语法 ========================= 增加列[add 列名] ========================= ①alter table 表名 add 列名 列 ...

  6. mysql表不存在_MySQL表不存在。但这确实(或者应该如此)

    我确实更改了MySQL安装的datadir,并按照某些步骤运行良好.我曾经动过的每个基地都正确地移动了,但是一个. 我可以连接和使用数据库,即使SHOW TABLES也会正确返回所有表,并且每个表的文 ...

  7. mysql约束条件整型_MySQL 表的操作

    表的操作 创建表的完整语法: create table 表名( 字段名1 字段类型[(宽度) 约束条件], 字段名1 字段类型[(宽度) 约束条件], 字段名1 字段类型[(宽度) 约束条件] ); ...

  8. mysql表结构定义_Mysql表结构定义及相关语法

    mysql语法及相关命令 1.每个sql命令都需要使用分号来完成 2.可以将一个命令写成多行 3.可以通过\c来取消本行命令 4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端 5. ...

  9. mysql BDB支持表锁吗_mysql 表锁问题

    本文转自:http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整 ...

最新文章

  1. [UWP]在应用开发中安全使用文件资源
  2. Matplotlib实例教程(十一)堆栈图
  3. c语言最小元素下标怎么看,查找最小的k个元素 (C语言代码)
  4. HTML5性能优化需要注意的几个问题
  5. Numpy.random中shuffle与permutation的区别(转)
  6. Redis操作Set的相关API
  7. (原+转)ubuntu中删除文件夹
  8. vue与php接口对接,怎样使用vue项目中api接口
  9. Orleans 知多少 | 2. 核心概念一览
  10. CSS--居中方式总结
  11. 抖音最强python_装逼篇 | 抖音超火的九宫格视频是如何生成的,Python 告诉你答案...
  12. Python的WSGI
  13. Python风格总结:ASCII码与字符相互转换
  14. Http Simulate
  15. AD PCBlayout 总结
  16. android 高仿淘口令,[Android开发]简单版仿淘口令复制弹出框功能
  17. dht11温湿度传感器工作原理引脚功能电路接线图
  18. orcad 连mysql_OrCAD Capture CIS元件库用mysql数据库
  19. Java中的增强for
  20. 笔记本设置WiFi热点命令操作

热门文章

  1. python模块commands执行系统命令
  2. 大公司运维监控怎么做?从哪些方面考虑?
  3. 国科大学习资料–图像处理(彭思龙、杨戈)--第二次作业
  4. python 子类 超类 继承
  5. 开店前必看|咖啡行业前景怎么样?咖啡行业开店利润高吗
  6. 单向空间后方交会C++代码实现
  7. android 用拼音对汉字排序
  8. 谢雨欣最欣专辑《欣天地》
  9. 从知识付费到文化大热,谁来解救年轻人饥渴的灵魂?
  10. 内容分发技术平台_内容分发平台及排名_编辑机器人|Giiso智搜