Mysql数据库的使用总结之ERROR 1146 (42S02)

在使用 mysql数据库过程中,遇到了错误 ERROR 1146 (42S02) Table doesn’t exist ,经过了两天,终于解决了这个问题。引起该错误的原因不同,对应的解决方法也不同。这里只针对我的情况进行一下说明。可能写的比较乱,希望你慢慢看,下面是我整个从犯错误到解决问题的整个过程,有助于你更好的了解相关知识。
      先说一下发生该错误的情形。我是将别人的数据库目录下的 data 文件夹直接复制过来的,里面有三个数据库 mysql test backupctrl ,主要想要 backupctrl 数据库,记住不是备份,是拷贝,而且 backupctrl 是使用 innodb 作为存储引擎的,这两方面综合起来就导致了 1146 这个错误。
       因为要使用 innodb做存储引擎,所以要对 my.ini文件进行相应的修改。在 my.ini文件中,你可以找到关于 innodb的相关设置,但是被注释掉了。因为 mysql5.1版本后, innodb不在作为默认的设置了。首先将 skip-innodb注释掉,然后需要设置正确 innodb的相关参数。
       采用 innodb存储引擎,关系到 data文件夹下面的一些文件: ib_logfile0ib_logfile1ibdata1,另外还有一个就是数据库名下面的众多 .frm文件。先对这几个文件作简要介绍。
       ib_logfile0ib_logfile1是关于数据库的一些日志文件;
       .frm文件是数据库中很多的表的结构描述文件;
       ibdata1文件时数据库的真实数据存放文件。
       在将别人的 data文件夹整个复制过来后,你到 mysql目录下的 bin文件夹下运行命令:
       mysql  --console
       此时,你会发现很多的错误提示,该命令就是对环境进行测试的。如果你不理会这些错误,进入数据库,用 show tables;命令发现数据库表存在,但是执行 select等操作就会出现 1146 Table doesn’t exist 这个错误了。
     其实这是由 ibdata1文件的错误引起的,这个应该在日志文件 ib_logfile0ib_logfile1中找到(这个本人没有验证),于是把 ibdata1文件删除掉,再次执行该命令,发现没有提示错误了,但进入数据库以后,操作仍就导致 1146 这个错误。后来仔细一下,也是,你说你把 ibdata1文件删除,相当于把数据库的真实数据删除了,这时你就会问为什么数据库表还存在呢,都能看到(其实我当初就是这么想的),因为数据库表结构的描述是在 .frm的众多文件中的,所以能通过 show tables;查看到。
       那么下一个问题就出来了: ibdata1文件是从别人那里拷贝过来的,为什么在那边能用,到我这边就不能用了呢?这就是最核心的问题所在,因为 mysql是采用缓冲方式来讲数据写入到 ibdata1文件中的,这正是 fflush()函数存在的理由。因此当别人的 mysql在运行时,你对 data文件夹进行拷贝,即对 ibdata1进行拷贝肯定会导致该文件中的数据出错的(具体错误原因没有深入学习)。
       知道了上面的问题,解决就简单多了,呵呵。首先,将别人的 mysql服务停止(这个就不用说了吧,我的前两篇博文中有,你可以参考),然后在拷贝 data文件夹,替换到你的相应目录下。这样,你再按照我的博文 http://jazka.blog.51cto.com/809003/329423中介绍的方法对数据库进行操作就可以了。
        网上查找解决办法时,发现也有不少人有这个问题,而按照停止服务再拷贝的方式还是不行(我刚开始也不行,不过后来就好了,怪了,不知道为什么)。所以这里再说一种方法。 首先在自己的mysql下,建立一个你即将要拷贝的数据库(数据库名要一样,里面不需要建表),然后将所有的.frm文件拷贝到你建的数据库文件夹下 ,此时再次进入 mysql ,用 show  tables 查看表是否已经建立起来了。然后停止你自己的 mysql 服务,发现在 data 文件下面已经有 ib_logfile0 ib_logfile1 ibdata1 三个文件了(免安装版解压后是没有的),之后停掉别人的 mysql 服务,只将 ibdata1 文件拷贝过来进行覆盖,最后启动你自己的 mysql 服务就可以对数据库进行正常操作了。
注:需要一个mysql innodb‘ 环境没有问题的 服务器 然后按照 红色字体写的,复制过去后,重新启动mysql 即可得到 正确 的表,然后到处sql文件,就可以随意使用了。
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ql.table_name' doesn't exist 这个错误提示是因为在执行SQL语句时,找不到指定的表。可能是因为表名拼写错误、表不存在或者没有权限访问该表。需要检查SQL语句中的表名是否正确,并确保该表已经创建或者存在于数据库中。如果表名正确,可以尝试重新创建该表或者检查权限设置。 ### 回答2: error 1146 (42s02)是数据库操作中经常遇到的错误代码之一。这个错误代码通常表示某个表不存在或者无法找到。在遇到这个错误时,需要先确定出错的原因,然后再选择相应的解决方法。 可能出现1146错误代码的原因有以下几点: 1. 数据库中没有该表。可能是由于表被删除或者表的名称拼写错误等原因导致的。这种情况下,可以通过查看数据库中的其他表或者查询mysql系统表,找出表丢失的原因,然后重新创建该表。 2. 当前用户没有对该表的操作权限。在进行表操作时,需要确保当前用户有足够的权限进行相关操作。如果当前用户没有对该表的操作权限,可以使用GRANT命令为当前用户授予权限,或者使用管理员账户对该表进行操作。 3. 表的元数据损坏。可能是由于系统错误或者硬件故障导致的表元数据损坏。如果出现这种情况,可以使用MySQL提供的修复工具,或者使用备份的表数据进行恢复。 4. 数据库版本不同。可能由于所连接的数据库版本不同而导致表不存在。如果出现这种情况,需要检查所使用数据库版本是否正确,并且确保数据库连接正常。 综上所述,遇到1146错误代码的时候,需要先确定具体的出错原因,然后再根据不同的情况选择相应的解决方案。合理地处理1146错误可以保证数据操作的准确性和完整性。 ### 回答3: Error 1146 (42s02): table 'mys'是错误代码,意味着MySQL尝试访问一个不存在的表。这个错误通常是由于数据库中没有名为“mys”的表而导致的。 造成这种错误的原因有多种可能,包括: 1.表不存在:可能是由于使用了错误的表名或数据库名,或者在数据库中根本不存在该表。 2.表已被删除:如果之前存在该表,但现在已被删除,则无法访问该表。 3.访问权限不足:如果您正在尝试使用没有访问该表的权限的用户来访问该表,则会遇到此错误。 为了解决Error 1146 (42s02): table 'mys',您可以尝试以下几种方法: 1.检查表名:检查您正在使用的表名和数据库名是否正确,特别是在使用多个数据库时。 2.查看表是否存在:使用DESC或SHOW TABLES命令来检查您要访问的表是否存在。 3.还原备份: 如果该表被错误地删除或更改,您可以尝试从备份中恢复该表。 4.授权访问权限:确保您使用的用户具有访问该表的足够权限。 总之,要解决error 1146 (42s02): table 'mys'问题,您需要深入了解MySQL数据库的基本知识并仔细检查您的代码和数据库设置,查找可能导致此错误的原因。同时,也要使用备份和安全性能较高的账户保护自己的数据安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值