php mysql table_关于php:MySQL Table不存在错误,但确实存在

' doesn't exist错误?

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

任何帮助,将不胜感激。

确切查询:

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

您能告诉我们确切的查询您从哪里得到这个问题的吗?

是的,查询在哪里?

您可以使用终端访问数据库吗?

@ Enrico Pallazzo是的,我可以ssh进入盒子,到达数据库并从该表中执行sql。

@ajreal-我并不是说很粗鲁,但是如果我可以从命令行执行上述查询,则数据库和表显然匹配。

@Troy Knapp-提供的用于命令行的连接和php mysqli是相同的,可以再次检查吗?

@ajreal-三重检查,四重检查,等等。当我进行mysql dump时,它添加了一堆更多的用户列表,root的倍数等。我以为同一用户有多个行可能会导致这些错误,因此我删除了所有重复项……仍然不高兴。我进一步看了一下,发现我所有密码的哈希值都是16个字符,尽管该列设置为char(41)……我想知道这是否与它有关,但是我当然不想改变一半的密码。

@Troy Knapp-select Host, Db from mysql.db;怎么样

@ajreal-数据库蜘蛛由localhost和%拥有。同时,我在配置文件中发现old_password = 1。随mysql dump导入的其他一些用户名和密码都具有完整的32char散列。我正在运行的版本是MySQL 5.0.77,因此将默认设置设置为使用旧密码对我来说似乎很奇怪。

@Troy Knapp-最好的选择是dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

@ajreal-我想通了,设置old_password = 0,通过UPDATE mysql更新了所有用户的所有密码。user SET password = PASSWORD(在此处插入密码);这给了我所有32char哈希值。如果您写出答案,我会接受,因为您帮助引导我朝着正确的方向前进。

这只是发生在我身上,不久后,我在博客文章中找到了答案,并希望将其也放在这里。

如果将MySQL数据目录从/var/lib/mysql复制到/path/to/new/dir,但仅复制数据库文件夹(即mysql,wpdb,ecommerce等),并且确实有innodb表,则innodb表将显示在"显示表"中显示,但对它们(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 *文件。

我应该说对我的情况有用的答案,希望您也是如此:)

这对我有用,很有用!

非常感谢!你刚刚救了我的皮。这很棒。

您节省了我的时间...谢谢大家:)

这样做,现在mysql无法再启动,"作业无法启动"。详细信息:我将文件从archlinux上的一个mariadb复制到了mint / ubuntu上的另一个mariadb。两个mariadb版本之间的格式可能不兼容...

我真的认为这应该工作,但对我来说不行。我制作了/ var / lib的存档,将其导入到新的docker容器中,因此我拥有所有ib *文件以及所有其他内容,但是它仍然说它所列出的表不存在。

工作,但现在我以前删除的很多表又回来了。它不是一个真正的问题,只是奇怪。

我从Windows迁移到Ubuntu,只复制了包含idb和frm文件的数据库文件夹,该怎么办?请帮忙,我的心脏cho住了,我手动将100多个记录输入到2个表中,并在一个表中输入了1000+!

在这种情况下,可以使用mysqlcheck-因此您可以丢弃表的完整性问题并在需要时进行修复。

当我尝试使用大写字母选择表并且表名是小写时,这发生在我身上。

因此,为解决此问题,我在my.cnf文件中添加了" lower_case_table_names = 1"。

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

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

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

在我尝试此解决方案之前,我输入了一个博客条目,其中涉及到我所做的其他一些不起作用的事情(以防万一这些更改影响了我的结果),但是,我认为以上解决方案是完整的...但是我没有尝试重现该错误,所以我不能百分百

可能是您的一台服务器是Linux机器吗? Mysql在Linux上区分大小写,但在Windows上不区分大小写。

它们都是Linux盒,这个是CentOS,其他都是Debian ...不知道有没有帮助。当然,我可以通过本地测试镜像(即Windows)执行sql,因此这不是大小写问题。

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

我希望它是如此简单...出于这种原因,我总是使用小写字母。

这正是我正在发生的事情,我希望它是如此简单,因为您实际上已在此处发布了如何解决该问题。

Mac OS X?

停止,请勿再复制任何内容...

我在小牛队上遇到过几次这个问题。 MySQL已不再包括在内,但我的安装与我希望在Snow Leopard上找到的安装基本相同,而不是MAMP之类。

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

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

有时,我的两个进程并排运行!

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

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

我已经在带有mysql 5.1和xfs文件系统的centos 6.4系统上看到了这一点。

这些表以"显示表"显示,但是选择或描述失败,因为表不存在您所描述的消息。这些文件是我期望的位置。

该系统运行了好几个月,然后在将/etc/my.cnf更改为table_cache而不是256之后将服务mysqld重新启动后,它横摆了。

据arcconf称,raid控制器认为一切都很好。 xfs_check找不到任何东西。 IPMI的系统事件列表是明确的。 dmesg显示了iptables关于连接跟踪和删除程序包的一些抱怨,因此我们可能已经使用DOS,但是由于服务器上没有真正的外部运行,我看不到它如何影响mysql数据完整性?

我最终将从站升级为主机,然后重新加载系统,现在我想知道是什么引起了该错误,以及在centos 6.4上选择xfs还是一个稳定的选择,还是罪魁祸首是mysql 5.1。

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

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

这就是MyISAM,但这是一个好主意

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

我认为这是迄今为止最接近的答案。连接到服务器时,我得到了一些奇怪的行为。无论出于何种原因,我只能以一个用户的身份成功连接(通过php,使用终端,我可以以任何身份登录)。该用户似乎对有关的数据库和表具有完全授权,我什至对有关的数据库执行了GRANT ALL PRIVILEGES,但仍然收到相同的错误。这真的很奇怪。

Copyright ©  码农家园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值