[大数据] Error【1146】:Table ‘xxx.xxx‘ doesn‘t exist问题原因及解决方法

[复制链接]
查看: 983|回复: 0

12

主题

12

帖子

48

积分

新手上路

Rank: 1

积分
48
发表于 2021-3-20 11:43:16 | 显示全部楼层 |阅读模式
我们在使用mysql数据库的时候,有时会因为各种误操作而导致各种问题。下面介绍的导致1146报错的原因及解决方法。
原因
3.png
由报错Table ‘xxx.xxxxx’ doesn’t exist可知,其中的mysql.proc表不存在而发生错误。
【1】插入数据或更改数据时使用的表输入错误
【2】linux的mysql区分大小写,数据库中的表名与输入的sql语句中的使用的表名大小写不一致导致的
【3】数据库操作时,误删mysql的文件导致(常见于数据库升级或迁移)
【4】在编译安装mysql时,没有指定innodb存储引擎


解决步骤
【1】查看自己的sql语句是否正确,如此语句正确,则看下一条方法

【2】查看是否有此表,不要忽视大小写
如此表存在,则是linux的mysql区分大小写导致;如此表不存在,则看下一条方法

解决方法如下:
<1>查找该mysql数据库的配置文件my.cnf的路径
<2>在my.cnf中的[mysqld]下,追加lower_case_table_names = 1
1表示不区分大小写,0区分大小写

3.png
<3>重启mysql,重新在此表插入数据,看是否可用
  1. systemctl restart maraidb/mysqld(centos7)
  2. /etc/init.d/mysqld restart(centos6)
复制代码
【3】如该表真的不存在,则可能是表被误删或数据库迁移缺失文件等原因导致。
解决方法如下:

方法一:创建此表。(不同表结构根据实际情况)

例如:mysql.servers表的创建。
  1. CREATE TABLE `mysql.servers` (
  2.         `Server_name` char(64) NOT NULL,
  3.         `Host` char(64) NOT NULL,`Db` char(64) NOT NULL,
  4.         `Username` char(64) NOT NULL,
  5.         `Password` char(64) NOT NULL,
  6.         `Port` int(4) DEFAULT NULL,
  7.         `Socket` char(64) DEFAULT NULL,
  8.         `Wrapper` char(64) NOT NULL,
  9.         `Owner` char(64) NOT NULL,
  10.         PRIMARY KEY (`Server_name`)
  11.         ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

  12. flush privileges;
复制代码
方法二:修复损坏表
(修复方式还有很多种,请查询,只列一种)

repair table 表名;

方法三:拷贝缺失文件(最常用方法)
  1. 原理:

  2. 当表类型是MyISAM时,数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中。

  3. 当表类型是InnoDB时,数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况),结构文件存在于table_name.frm中。

  4. MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。 而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。

  5. MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。 解决方法就是同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。
复制代码
<1>从另外相同的mysql数据库或之前的数据库备份中导出该表的数据,然后通过命令行导入进去

<2>或直接拷贝原有数据库文件".frm"、".MYD"、"*.MYI"等文件,如果原数据库引擎是InnoDB,切记还需拷贝ibdata1文件
(暴力点的是直接拷贝之前备份了的data)

<3>重启数据库
【4】如果是编译安装mysql时,没有指定innodb存储引擎

<1>重新编译
  1. cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
  2. 24

  3. make && make install
复制代码

腾讯云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩图文



在线客服(工作时间:9:00-22:00)
400-600-6565

内容导航

微信客服

Copyright   ©2015-2019  云服务器社区  Powered by©Discuz!  技术支持:尊托网络     ( 湘ICP备15009499号-1 )