2010-11-23 53 views
19

有没有人知道在什么情况下你可以收到一个1146: Table '<database>.<table>' doesn't exist错误当你的表确实存在?MySQL表不存在错误,但它确实存在

我在5台服务器上使用相同的代码,只有我最近租用的代码显示此错误,所以我怀疑它可能是某种设置或安装错误。我可以从命令行执行我的sql语句就好了。显然,我可以从命令行看到表格。我在建立连接时没有遇到任何连接错误(我正在使用mysqli,btw)。

任何帮助,将不胜感激。

精确查询:

$sql = "SELECT DISTINCT(mm_dic_word) AS word FROM spider.mm_dictionary WHERE mm_dic_deleted=0"; 
+0

你能向我们展示确切的查询,你在哪里得到这个问题? – 2010-11-23 20:29:50

+0

是啊查询在哪里? – luckytaxi 2010-11-23 20:32:37

+0

你可以使用终端到达数据库吗? – 2010-11-23 20:33:55

回答

2

基本上,我相信我遇到的问题是由于不同的密码哈希长度。在我的情况下,我得到了一个新的服务器,做了一个完整的mysql转储,它也传递了密码和用户信息。新服务器已经使用具有16char长度散列的root用户初始化,但我的旧服务器使用了较新的32个char散列长度。

我不得不去my.conf设置旧的密码设置为0(其他明智每次我尝试更新数据库,新的更新是16个字符的长度)。然后我通过命令UPDATE mysql.user SET password=PASSWORD('password here');更新了所有的密码,然后我刷新了权限。

显然,让每个用户使用相同的密码是一个非常糟糕的主意,所以我在确认它正在工作后逐一更改它们。

我在我遇到这个解决方案之前发现了一些我没做过的工作here的博客文章(以防一个或多个变化影响我的结果),但是,我认为上述解决方案是完整的......但我没有试图重现错误,所以我不能100%确定。

2

难道说你的一台服务器是一台Linux机器? Mysql在Linux上区分大小写,但在Windows上不敏感。

1

我曾经有过这种行为。后来我发现我使用的JDBC驱动程序将我的查询改为小写,所以我无法使用我的数据库(使用混合大小写字母),尽管我的代码使用了正确的混合字母。

0

如果您以无权查看该数据库/表的人身份登录,那么您可能会得到该结果。你是否在命令行中使用与你通过mysqli相同的登录名?

0

它可能与将InnoDB和MyISAM表放在一起有关。如果您复制数据库文件,MyISAM将会很好,InnoDB将会显示,但无法工作。

44

这只是发生在我身上,过了一段时间,我在博客文章中找到了答案,并且希望将它也放在这里。

如果复制的MySQL数据目录从/var/lib/mysql/path/to/new/dir,但只复制数据库的文件夹(即mysqlwpdbecommerce等),你有InnoDB表,你InnoDB表将在“显示表”现身但对它们的查询(selectdescribe)将失败,并显示错误Mysql error: table db.tableName doesn't exist。你会在db目录中看到.frm文件,并想知道为什么。

InnoDB表,它在ib*文件,这在我的情况是ibdata1ib_logfile0,并ib_logfile1复制是非常重要的。一旦我做了转让,确保将其复制完毕,一切都按预期工作。

如果my.cnf文件包含“innodb_file_per_table”,.ibd文件将出现在db目录中,但仍需要ib *文件。

4

在这种情况下使用mysqlcheck将是顺序 - 所以你可以放弃表格完整性问题&如果需要修复它们。

0

我在一个使用mysql 5.1和xfs文件系统的centos 6.4系统上看到过这个。

这些表显示'显示表',但选择或描述失败,表中不存在消息,如您所述。这些文件是我期望它们的地方。

系统运行良好数月,然后在更改/etc/my.cnf以将table_cache设置为512而不是256之后重新启动服务mysqld之后,它横向移动。

根据arcconf,raid控制器认为一切正常。 xfs_check没有找到任何东西。 IPMI的系统事件列表清晰。 dmesg显示了iptables关于连接跟踪和丢包的一些抱怨,所以我们可能已经DOS了,但是因为在服务器上没有真正面对外面的问题,所以我没有看到它会如何影响mysql的数据完整性?

我最终推动奴隶掌握和重新加载系统,现在想知道什么可能导致错误,如果在centos 6.4上选择xfs仍然是一个稳定的选择,或者如果罪魁祸首是mysql 5.1 。

哦是的,永远不会改变正在运行的系统:)

0

Mac OS X? 停止,不要重新复制任何东西......

我在小牛队有几次这个问题。不再包含MySQL,但我的安装基本上与您期望在Snow Leopard上找到的相同,我认为,而不是MAMP或其他。

从一台计算机迁移到另一台后,出现此问题。这是MySQL控制面板启动mysqld的结果,而不是我在命令行上启动的结果。 (在迁移时,这个稍微过时的控制面板会忘记您告诉它不要在启动时启动。)

查看我的系统上的进程(顶部或活动监视器):如果所有者为root,则启动时启动并且不能正常工作;正确的过程将拥有_mysql作为所有者。

有时候,我两个人都并肩奔跑!

奇怪的是,你可以做所有事情,包括通过命令行使用mysql。但是,即使列出了innodb表,它们在查询时也会生成不存在的错误。

这似乎是一个所有权问题,也可能适用于其他系统。

0

当我试图用UPPERCASE选择一个表格并且表格名称为小写时,这种情况发生在我身上。

所以,为了解决这个问题,我在my.cnf文件中加入了“lower_case_table_names = 1”。

相关问题