Error【1146】:Table 'xxx.xxx' doesn't exist问题原因及解决方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GX_1_11_real/article/details/81347343

前言



我们在使用mysql数据库的时候,有时会因为各种误操作而导致各种问题。下面介绍的导致1146报错的原因及解决方法。



原因



这里写图片描述

由报错Table ‘xxx.xxxxx’ doesn’t exist可知,其中的mysql.proc表不存在而发生错误。


【1】插入数据或更改数据时使用的表输入错误



【2】linux的mysql区分大小写,数据库中的表名与输入的sql语句中的使用的表名大小写不一致导致的



【3】数据库操作时,误删mysql的文件导致(常见于数据库升级或迁移)



【4】在编译安装mysql时,没有指定innodb存储引擎







解决步骤



【1】查看自己的sql语句是否正确


如此语句正确,则看下一条方法


解决方法如下:

<1>不正确请改正



【2】查看是否有此表,不要忽视大小写


如此表存在,则是linux的mysql区分大小写导致;如此表不存在,则看下一条方法


解决方法如下:

<1>查找该mysql数据库的配置文件my.cnf的路径

<2>在my.cnf中的[mysqld]下,追加lower_case_table_name = 1
1表示不区分大小写,0区分大小写

这里写图片描述

<3>重启mysql,重新在此表插入数据,看是否可用

systemctl restart maraidb/mysqld(centos7)

/etc/init.d/mysqld restart(centos6)



【3】如该表真的不存在,则可能是表被误删或数据库迁移缺失文件等原因导致。


解决方法如下:

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

例如:mysql.servers表的创建。

 CREATE TABLE `mysql.servers` (
        `Server_name` char(64) NOT NULL,
        `Host` char(64) NOT NULL,`Db` char(64) NOT NULL,
        `Username` char(64) NOT NULL,
        `Password` char(64) NOT NULL,
        `Port` int(4) DEFAULT NULL,
        `Socket` char(64) DEFAULT NULL,
        `Wrapper` char(64) NOT NULL,
        `Owner` char(64) NOT NULL,
        PRIMARY KEY (`Server_name`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

flush privileges;

方法二:修复损坏表
(修复方式还有很多种,请查询,只列一种)

repair table 表名;


方法三:拷贝缺失文件(最常用方法)


原理:

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

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

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

MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。 解决方法就是同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。

<1>从另外相同的mysql数据库或之前的数据库备份中导出该表的数据,然后通过命令行导入进去

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

<3>重启数据库



【4】如果是编译安装mysql时,没有指定innodb存储引擎

<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
 24 

make && make install

猜你喜欢

转载自blog.csdn.net/GX_1_11_real/article/details/81347343