引擎中不存在表

san*_*han 7 mysql

我在我的 mysql 数据库中收到一个奇怪的错误:

SELECT * FROM mytable
Run Code Online (Sandbox Code Playgroud)

返回:

ERROR 1932 (42S02): Table 'mydb.mytable' doesn't exist in engine
Run Code Online (Sandbox Code Playgroud)

我可以确认这些表确实存在于本地文件系统中,show tables;并且确实返回了我感兴趣的表。

show tables;

+-----------------+
| Tables_in_mydb  |
+-----------------+
| presets         |
| mytable         |
+-----------------+
Run Code Online (Sandbox Code Playgroud)

和选择:

select * from mytable;

Table 'mydb.mytable' doesn't exist in engine. 
Run Code Online (Sandbox Code Playgroud)

错误完全没有意义,几天前我一直在使用这个表,没有任何问题。我没有移动桌子。我该怎么办?

在上述错误出现之前,我收到了一个错误:

用户 'root'@'localhost' 访问被拒绝(使用密码:YES),但我成功更新了密码。我不知道是什么触发了这个错误,因为我没有玩过密码。

但是,当我尝试修复此错误时,我已将权限设置/Applications/XAMPP/xamppfiles/var/mysql为对所有人进行读/写。

我可以物理访问数据库的 .frm 和 .ibd 文件。我相信我使用 InnoDB 存储引擎。

更新:

show table status 返回一个非常奇怪的输出:

+-----------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+------------------------------------------------------+
| Name            | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation         | Checksum | Create_options | Comment                                              |
+-----------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+------------------------------------------------------+
| preset          | NULL   |    NULL | NULL       | NULL |           NULL |        NULL |            NULL |         NULL |      NULL |           NULL | NULL                | NULL        | NULL       | NULL              |     NULL | NULL           | Table 'mydb.preset' doesn't exist in engine          |
| mytable         | NULL   |    NULL | NULL       | NULL |           NULL |        NULL |            NULL |         NULL |      NULL |           NULL | NULL                | NULL        | NULL       | NULL              |     NULL | NULL           | Table 'mydb.mytable' doesn't exist in engine         |
Run Code Online (Sandbox Code Playgroud)

更新 2 ls -lh /Applications/XAMPP/xamppfiles/var/mysql/返回

-rwxrwxr--   1 _mysql  706   135K Jan  4  2017 My-MBP.err
-rwxrwxr--   1 _mysql  706   897K Jan 27 00:46 My-MacBook-Pro.local.err
drwxrwxr-x  33 _mysql  706   1.1K Feb 20  2017 abraham
drwxrwxr-x   7 _mysql  706   238B May 27  2016 accounts
-rwxrwxr--   1 _mysql  706    16K Jan 27 00:46 aria_log.00000001
-rwxrwxr--   1 _mysql  706    52B Jan 27 00:46 aria_log_control
drwxrwxr-x  23 _mysql  706   782B Jun 11  2017 ch7
drwxrwxr-x  31 _mysql  706   1.0K Jun 19  2017 coronel_2
drwxrwxr-x   5 _mysql  706   170B May 29  2017 emails
-rwxrwxr--   1 _mysql  706   5.0M Jan 27 00:46 ib_logfile0
-rwxrwxr--   1 _mysql  706   5.0M Nov 24  2015 ib_logfile1
-rwxrwxr--   1 _mysql  706    74M Jan 27 00:46 ibdata1
drwxrwxr-x   5 _mysql  706   170B Aug 28 17:44 jsonTest
-rwxrwxr--   1 _mysql  706     0B Nov 24  2015 multi-master.info
drwxrwxrwx   9 _mysql  706   306B Jan 26 11:40 mydb
drwxrwxr-x  89 _mysql  706   3.0K Jan 15 11:29 mysql
drwxrwxr-x  13 _mysql  706   442B May 30  2017 payments_ipndb
drwxrwxr-x   3 _mysql  706   102B Jan 15 11:29 performance_schema
drwxrwxr-x  41 _mysql  706   1.4K Jan 15 11:29 phpmyadmin
drwxrwxr-x   2 _mysql  706    68B Jan 15 11:28 test
drwxrwxr-x   5 _mysql  706   170B Jun 11  2017 tracking
drwxrwxr-x   9 _mysql  706   306B May 17  2017 tutorial
drwxrwxr-x   9 _mysql  706   306B Feb 21  2017 users
Run Code Online (Sandbox Code Playgroud)

ls -lh /Applications/XAMPP/xamppfiles/var/mysql/mydb/返回

-rw-rw-rw-  1 _mysql  706    65B Sep  4 17:57 db.opt
-rw-rw-rw-  1 _mysql  706   1.8K Sep  8 18:20 preset.frm
-rw-rw-rw-  1 _mysql  706    96K Sep  9 20:53 preset.ibd
-rw-rw-rw-  1 _mysql  706   1.0K Jan 11 16:15 mytable.frm
-rw-rw-rw-  1 _mysql  706   128K Jan 11 21:02 mytable.ibd
Run Code Online (Sandbox Code Playgroud)

.err 文件包含以下消息:

[Warning] InnoDB: Cannot open table mydb/mytable from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
Run Code Online (Sandbox Code Playgroud)

即使有了那个链接,我仍然不确定该怎么做。

更新:

我可以确认错误来自重新安装 XAMPP。我创建了一个新表,我可以正常使用它。比我重新安装了 xampp,新创建的表不再可访问,返回与所有其他表相同的错误:Table doesn't exist in engine.

我在错误日志中也得到同样的错误:[Warning] InnoDB: Cannot open table mydb/newlycreatedtable from the internal data dictionary of InnoDB though the .frm file for the table存在。我仍然不知道如何解决它。

小智 0

我不是 mysql 专家,所以这可能不是问题。

该错误引用了架构,而您的 select 语句没有引用该架构。尝试添加架构或由两部分组成的对象名称。看起来您的默认架构是 mydb,并且您可能在不同的架构中创建了该表。