MySQL表不存在错误,但确实存在

Tro*_*app 21 php mysql mysql-error-1146

有人知道在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";
Run Code Online (Sandbox Code Playgroud)

Isa*_*aac 45

这恰好发生在我身上,过了一段时间我在一篇博客文章中找到了答案,并想把它放在这里.

如果从复制MySQL数据目录/var/lib/mysql/path/to/new/dir,但只复制数据库的文件夹(例如mysql,wpdb,ecommerce等),你有InnoDB表,你InnoDB表将在"显示表",但查询它们显示出来(selectdescribe)将失败,有错误Mysql error: table db.tableName doesn't exist.您将.frm在db目录中看到该文件,并想知道原因.

InnoDB表,它复制在很重要的ib*文件,这在我的情况是ibdata1,ib_logfile0ib_logfile1.一旦我做了转移,确保复制过来,一切都按预期工作.

如果你的my.cnf文件包含"innodb_file_per_table",.ibd文件将出现在db目录中,但你仍然需要ib*文件.

  • 我应该说答案对我的情况有用,希望你也是:) (3认同)

Tro*_*app 2

基本上,我相信我遇到的问题是由于密码哈希长度不同造成的。就我而言,我得到了一台新服务器,在其上进行了完整的 mysql 转储,还传输了密码和用户信息。新服务器已经使用具有 16 个字符长度哈希的 root 用户进行了初始化,但我的旧服务器正在使用较新的 32 个字符哈希长度。

我必须进入 my.conf 将旧密码设置为 0(否则每次我尝试更新数据库时,新更新的长度都是 16 个字符)。然后我通过命令将所有密码更新为相同UPDATE mysql.user SET password=PASSWORD('password here');,然后刷新权限。

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

在我偶然发现这个解决方案之前,我输入了一篇博客文章,其中介绍了我所做的一些其他在这里不起作用的事情(以防万一这些更改中的一个或多个影响了我的结果)但是,我认为上述内容解决方案是完整的...但我还没有尝试重现该错误,所以我不能 100% 确定。