我在我的 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,并且您可能在不同的架构中创建了该表。