mysql中1146提示_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_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文件夹,替换到你的相应目录下。这样,你再按照我的博文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文件,就可以随意使用了。

随机推荐

Eclipse 实用技巧

代码智能提示 Java智能提示 Window -> Preferences -> Java -> Editor -> Content Assist -> Auto Act ...

apt系统中sources.list文件的解析

/etc/apt/sources.list 一般源信息都存在这个文件中.但众多软件源都放在一个文件中实在有点乱,于是新版ubuntu也有了分类的方法: 文件夹  /etc/apt/sources.li ...

Project Euler 92:Square digit chains 平方数字链

题目 Square digit chains A number chain is created by continuously adding the square of the digits in ...

转ATL对象类型

http://hi.baidu.com/rural_child/item/d91ce5d8fba9c8e73cc2cbf9 1.Objects a.Simple Object:用于实现业务逻辑,无用户 ...

system partition table

转载内容 摘录部分我的笔记的中doc,和大家一起感受Oracle 11g在分区方面的增强--System Partitioning 系统分区的特点 ●系统分区与其他分区相比,一个最根本的区别就是不需要 ...

了不起的分支和循环01 - 零基础入门学习Python007

了不起的分支和循环01 让编程改变世界 Change the world by program 我们今天的主题是"了不起的分支和循环",为什么小甲鱼不说C语言,不说Python了不 ...

将Qt 动态链接生成的exe及依赖dll打包方法

源地址:http://blog.csdn.net/ztz0223/article/details/8939341 将Qt 动态链接生成的exe及依赖dll打包方法 原文:http://www.qtcn ...

VS2010打开旧版本MFC工程无对话框

解决方案: 左侧有个"资源视图",打开,里面就能找得到对话框,如果没有资源视图,就在菜单的视图选项里打开资源视图!

剑指Offer-表示数值的字符串

题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...

隐马尔科夫模型研究 stock 以及 lotto

说明 本文参考了这里 由于数据是连续的,因此使用了高斯隐马尔科夫模型:gaussianHMM 一.stock代码 import tushare as ts import pandas as pd im ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值