有人知道在你的桌子确实存在的情况下你会在什么条件下收到1146: Table '<database>.<table>' doesn't exist
错误?
我在5台服务器上使用相同的代码,只有我最近租用的一台显示此错误,所以我怀疑它可能是某种设置或安装错误。我可以从命令行执行我的sql语句就好了。显然,我也可以从命令行看到该表。建立连接时我没有遇到任何连接错误(我正在使用mysqli,顺便说一句)。
任何帮助都将不胜感激。
确切查询:
$sql = "SELECT DISTINCT(mm_dic_word) AS word FROM spider.mm_dictionary WHERE mm_dic_deleted=0";
答案 0 :(得分:44)
这恰好发生在我身上,过了一段时间我在一篇博客文章中找到了答案,并想把它放在这里。
如果将MySQL数据目录从/var/lib/mysql
复制到/path/to/new/dir
,但只复制数据库文件夹(即mysql
,wpdb
,ecommerce
等)你确实有innodb表,你的innodb表将显示在'show tables'中,但对它们的查询(select
和describe
)将失败,错误为Mysql error: table db.tableName doesn't exist
。您将在db目录中看到.frm
文件,并想知道原因。
对于innodb表,重要的是复制ib*
文件,在我的情况下是ibdata1
,ib_logfile0
和ib_logfile1
。一旦我完成转移,确保将其复制完毕,一切都按预期工作。
如果你的my.cnf文件包含“innodb_file_per_table”,.ibd文件将出现在db目录中,但你仍然需要ib *文件。
答案 1 :(得分:4)
在这种情况下使用mysqlcheck将是有序的 - 所以你可以放弃表格健全问题&amp;如果需要的话,修理它们。
答案 2 :(得分:2)
可能是你的一台服务器是linux机箱吗? Mysql在Linux上区分大小写,但在Windows上不敏感。
答案 3 :(得分:2)
基本上,我认为我遇到的问题是由于密码哈希长度不同。在我的情况下,我有一个新的服务器,在它上面做了一个完整的mysql转储,它也转移了密码和用户信息。新服务器已经使用具有16char长度哈希的root用户进行了初始化,但是我的旧服务器使用了较新的32个字符哈希长度。
我不得不进入my.conf,将旧密码设置为0(每当我尝试更新数据库时,其他方面都是新的,更新的长度为16个字符)。然后我通过命令UPDATE mysql.user SET password=PASSWORD('password here');
将所有密码更新为相同的,然后我刷新了权限。
显然,让每个用户使用相同的密码是一个非常糟糕的主意,所以在我确认它正常工作后,我逐个更改了它们。
我输入了一个博客条目,在我遇到这个解决方案之前,进入了我做过的其他一些不起作用的事情here(以防这些变化中的一个或多个影响了我的结果)但是,我认为上述解决方案是完整的...但我没有尝试重现错误,所以我不能百分百肯定。
答案 4 :(得分:1)
我曾经有过这种行为。后来我发现我使用的JDBC驱动程序将我的查询更改为小写,因此我无法访问我的数据库(使用混合大小写字母),尽管我的代码使用了正确的混合字母。
答案 5 :(得分:1)
当我尝试使用大写选择表并且表名是小写的时,这发生在我身上。
所以,为了解决这个问题,我把&#34; lower_case_table_names = 1&#34;在my.cnf文件上。
答案 6 :(得分:0)
如果您以无权查看该数据库/表的方式登录,那么您可能会获得该结果。您是否在命令行中使用与mysqli相同的登录名?
答案 7 :(得分:0)
这可能与将InnoDB和MyISAM表放在一起有关。如果您复制数据库文件,MyISAM就可以了,InnoDB会显示但无法正常工作。
答案 8 :(得分:0)
我在带有mysql 5.1和xfs文件系统的centos 6.4系统上看到了这一点。
这些表显示'show tables'但是select或describe失败,表中没有您所描述的现有消息。文件是我期望的文件。
系统运行良好数月,然后在更改/etc/my.cnf后将服务mysqld重启后将table_cache设置为512而不是256,它就横向移动了。
根据arcconf,raid控制器认为一切都很好。 xfs_check没有找到任何内容。 IPMI的系统事件列表很清楚。 dmesg显示iptables关于连接跟踪和丢弃包的一些抱怨,所以我们可能已经DOS了,但是由于服务器上没有真正的外部运行,我看不出它会如何影响mysql数据的完整性?
我最终推动奴隶掌握并重新加载系统,现在我想知道是什么原因导致错误,如果选择xfs on centos 6.4仍然是一个稳定的选择,或者罪魁祸首是mysql 5.1。
哦,是的,永远不要改变正在运行的系统:)
答案 9 :(得分:0)
Mac OS X? 停止,不要重新复制任何东西......
我在小牛队经历了几次这个问题。不再包含MySQL,但我的安装基本上与您期望在Snow Leopard上找到的相同,我认为,而不是MAMP或其他东西。
从一台计算机迁移到另一台计算机后,我遇到了这个问题。这是MySQL控制面板启动mysqld的结果,而不是我在命令行启动它。 (迁移时,这个有点过时的控制面板会忘记你告诉它不要在启动时启动。)
查看我的系统上的进程(顶部或活动监视器):如果所有者是root,它是由启动启动的,并且无法正常工作;正确的进程将_mysql作为所有者。
有时候,我有两个并排的流程!
奇怪的是,你可以做任何事情,包括通过命令行使用mysql。但是,即使列出了innodb表,它们也会在查询时生成不存在的错误。
这似乎是一个所有权问题,也可能适用于其他系统。