1146 mysql_MySQL--ERROR 1146 (42S02):table doesn’t exist

ERROR 1146 (42S02): Table ‘xxx’ doesn’t exist 可能是很多人都遇到的问题,尤其在数据库迁移或备份的时候

mysql数据目录结构

mysql数据目录下有如下几个重要文件:ibdata1

ib_logfile0

ib_logfile1

数据库xx 以及该目录下的一系列 .frm 文件

其中

ib_logfile0 和 ib_logfile1 是关于数据库的一些日志文件

数据库xx 是默认数据库和我们添加的数据库目录

ibdata1 存储了数据库的真实表数据

.frm 是存储了数据库表的结构描述说明

失误的操作过程

当我们把其他mysql下的目录,拷贝到我们新的mysql数据目录的时候,(仅仅是copy目录)

启动数据库,可以正常使用 show databases; 和 show tables;

但是在我们想继续查询表数据的时候 select * from video; ,报错了:

ERROR 1146 (42S02): Table ‘djangomysql.getvideo_video’ doesn’t exist1

2MariaDB [videos_db]> select * from video;

ERROR 1146 (42S02): Table 'videos_db.video' doesn't exist

继续探索原因

因为数据库目录 和 表结构也是存储在 .frm 文件内,因此我们可以正常使用 show databases; 和 show tables;

为什么查询表数据的时候发生错误呢?

那是因为ibdata1 文件受影响了,表数据存储在ibdata1中

mysql是通过缓存的方式写入数据到ibdata1,当我们异常拷贝ibdata1的时候,可能缓存数据还没写入,导致有点出入,因此操作顺序很重要

解决方案

介于ibdata1数据被影响了,我们需要矫正下数据写入顺序,如下:

1、在新mysql数据目录下新建我们需要拷贝的数据库 mysql/videos, 同时把旧mysql中对应数据库下的文件全部拷贝过来

2、启动mysql,查询 show databases 和 show tables 确定无误后,退出mysql shell,停止mysql服务(比如 service mariadb stop)

3、然后把旧mysql中的ibdata1文件拷贝到新mysql数据目录下 mysql/ibdata1,这个时候我们会发现目录下有 ib_logfile0 ib_logfile1 和 ibdata1

4、再次启动新的mysql服务,然后验证,mysql服务正常了……

反思

数据库需要严格的备份流程、恢复流程,避免一些低级的操作方式

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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数据库的基本知识并仔细检查您的代码和数据库设置,查找可能导致此错误的原因。同时,也要使用备份和安全性能较高的账户保护自己的数据安全。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值