在使用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_logfile0、ib_logfile1和ibdata1,另外还有一个就是数据库名下面的众多.frm文件。先对这几个文件作简要介绍。
ib_logfile0和ib_logfile1是关于数据库的一些日志文件;
.frm文件是数据库中很多的表的结构描述文件;
ibdata1文件时数据库的真实数据存放文件。
在将别人的data文件夹整个复制过来后,你到mysql目录下的bin文件夹下运行命令:
mysql --console
此时,你会发现很多的错误提示,该命令就是对环境进行测试的。如果你不理会这些错误,进入数据库,用show tables;命令发现数据库表存在,但是执行select等操作就会出现1146:Table doesn’t exist这个错误了。
其实这是由ibdata1文件的错误引起的,这个应该在日志文件ib_logfile0和ib_logfile1中找到(这个本人没有验证),于是把ibdata1文件删除掉,再次执行该命令,发现没有提示错误了,但进入数据库以后,操作仍就导致1146这个错误。后来仔细一下,也是,你说你把ibdata1文件删除,相当于把数据库的真实数据删除了,这时你就会问为什么数据库表还存在呢,都能看到(其实我当初就是这么想的),因为数据库表结构的描述是在.frm的众多文件中的,所以能通过show tables;查看到。
那么下一个问题就出来了:ibdata1文件是从别人那里拷贝过来的,为什么在那边能用,到我这边就不能用了呢?这就是最核心的问题所在,因为mysql是采用缓冲方式来讲数据写入到ibdata1文件中的,这正是fflush()函数存在的理由。因此当别人的mysql在运行时,你对data文件夹进行拷贝,即对ibdata1进行拷贝肯定会导致该文件中的数据出错的(具体错误原因没有深入学习)。
知道了上面的问题,解决就简单多了,呵呵。首先,将别人的mysql服务停止,然后在拷贝data文件夹,替换到你的相应目录下。
网上查找解决办法时,发现也有不少人有这个问题,而按照停止服务再拷贝的方式还是不行(我刚开始也不行,不过后来就好了,怪了,不知道为什么)。所以这里再说一种方法。首先在自己的mysql下,建立一个你即将要拷贝的数据库(数据库名要一样,里面不需要建表),然后将所有的.frm文件拷贝到你建的数据库文件夹下,此时再次进入mysql,用show tables查看表是否已经建立起来了。然后停止你自己的mysql服务,发现在data文件下面已经有ib_logfile0、ib_logfile1和ibdata1三个文件了(免安装版解压后是没有的),之后停掉别人的mysql服务,只将ibdata1文件拷贝过来进行覆盖,最后启动你自己的mysql服务就可以对数据库进行正常操作了。
分享到:
相关推荐
【2】linux的mysql区分大小写,数据库中的表名与输入的sql语句中的使用的表名大小写不一致导致的 【3】数据库操作时,误删mysql的文件导致(常见于数据库升级或迁移) 【4】在编译安装mysql时,没有指定innodb存储引擎...
在MySQL中,Temporary Tables(临时表)是一种特殊的数据存储结构,它们只在当前会话(session)中存在,不会影响到其他会话。这使得它们非常适合用于存储在复杂查询过程中的中间结果,尤其是在处理大数据集时。让...
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='NO_SUCH_TABLE'; ``` - 捕获特定`mysql_error_code`异常: ```sql DECLARE CONTINUE HANDLER FOR 1146 SET @info='NO_SUCH_TABLE'; ``` - 先定义...
使用RF-BM-S02模块的开发者可以得到信驰达公司提供的完整硬件、软件参考方案,帮助他们缩短产品研发周期,节省成本投入。信驰达公司在深圳市南山区科技园设有办公地点,提供电话、网站、传真、邮箱等多渠道的服务...
这两天在进行网站搬家,这次网站搬家采用直接打包mysql数据库和网页文件的形式进行迁移,上传好mysql data目录里面的网站数据库至VPS上mysql存放数据库的目录里面,解压就行。我的VPS存放数据库的路径是 /usr/local/...
蓝牙模块S02的中文资料为我们介绍了蓝牙4.0(BLE)技术在智能手机新外设开发中的应用,同时也提供了关于RF-BM-S02蓝牙模块的具体技术参数和使用方法。以下是详细的知识点: 1. 蓝牙4.0技术(BLE)简介:蓝牙4.0技术,...
但根据上述分析,我们可以了解到苏泊尔C2S02-B电磁炉电路图可能涵盖了如下知识要点: 1. 电磁炉的工作原理和电路设计基础。 2. 电磁炉中不同电路模块的功能和作用,比如驱动电路、取样电阻部分、高压主回路和电流...
Suits.S02E16.HDTV.x264-2HD.srt
很抱歉,根据您提供的信息,"S02-210.zip" 是一个压缩文件,但没有具体的描述或标签来指示其内容。通常,这样的命名可能代表某个课程、章节或者问题编号,例如可能是IT培训系列的第二季第210个主题。然而,由于缺乏...
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'memory.user_stat' doesn't exist ``` 这个问题的出现是因为MySQL默认配置不支持跨数据库的查询。要解决这个问题,必须确保MySQL配置文件中开启了不同...
《全球土壤数据库——深入解析全国土壤类型、土壤质地、土壤pH及土壤有机碳的空间分布》 在地球的表层,土壤是生命得以繁衍生息的基础,它承载着丰富的生物多样性,也是农业生产和生态环境的重要组成部分。全球土壤...
AU102S02.SHX
个人收集的关于SAP Condition 技术的一个文档。
MySQL实验报告5主要探讨了如何在数据库中使用存储过程和函数。存储过程和函数是数据库管理系统中的重要元素,它们能够帮助我们实现复杂的数据操作和逻辑处理。 首先,实验介绍了如何创建一个名为`sch`的数据表,该...
7. **补充知识**:PDO 提供了多种数据库驱动,如 MySQL、SQLite、PostgreSQL 等,因此错误代码会因数据库系统的不同而略有差异,但都遵循 SQLSTATE 的格式。 总之,了解和使用 PDO::errorCode() 是在 PHP 中进行...
S02 道德与社会责任.ppt
例如,`42S02`表示“表或视图不存在”。 2. **驱动错误码**:每个数据库驱动都有自己的特定错误代码,这个字段提供了具体的驱动级错误编号。例如,对于DB2,`-204`可能表示一个未定义的名称错误。 3. **驱动错误...