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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
 在使用 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 服务就可以对数据库进行正常操作了。


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/330418,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 监控 关系型数据库
|
2月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
283 59
|
6天前
|
网络协议 关系型数据库 MySQL
MySQL报ERROR 2002 (HY000)解决
通过上述步骤,可以有效地解决MySQL连接时出现的 `ERROR 2002 (HY000)`错误。这些步骤包括检查和启动MySQL服务、配置文件检查、套接字文件检查、日志文件分析、进程检查、防火墙设置、客户端配置和最终的MySQL重装。确保每个步骤都按顺序执行,有助于快速定位和解决问题,使MySQL服务器恢复正常运行。
82 0
|
3月前
|
SQL 关系型数据库 MySQL
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
这篇文章提供了解决MySQL数据库"Access denied for user 'root'@'localhost' (using password: YES)"错误的方法,通过跳过密码验证、修改root密码,然后重启服务来解决登录问题。
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
|
3月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
4月前
|
缓存 关系型数据库 MySQL
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
230 19
|
3月前
|
关系型数据库 MySQL Java
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
|
6月前
|
关系型数据库 MySQL 数据库连接
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
1870 52
解决 mysql8.0 ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)用户访问拒绝
|
4月前
|
关系型数据库 MySQL Linux
error: Failed dependencies: libncurses.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 libtinfo.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 如何解决?
error: Failed dependencies: libncurses.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 libtinfo.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 如何解决?
495 3
|
4月前
|
关系型数据库 MySQL 测试技术
MySQL 报错 ERROR 1709: Index column size too large
MySQL 报错 ERROR 1709: Index column size too large
200 4