文档章节

存储引擎和Mysql服务层出现索引信息不一致错误提示

AnthonyYau
 AnthonyYau
发布于 2016/05/13 10:21
字数 706
阅读 122
收藏 1

错误日志:

[ERROR] Table vip_cube/imp_sup_dm_sup_brand_name_goods_online_half_hm contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL

存储引擎和Mysql服务层出现索引统计信息不一致,是否进行了DDL操作(创建了索引?出现这个错误,新创建的索引是否能使用?)

  • 问题重现:
root@localhost*5.5.48-log[test] >create table employees like employees.employees;
Query OK, 0 rows affected (0.21 sec)
root@localhost*5.5.48-log[test] > \! cp employees.frm employees.frm.old
root@localhost*5.5.48-log[test] >alter table employees add index idx_first_name(first_name);
Query OK, 0 rows affected (0.64 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@localhost*5.5.48-log[test] >\! mv employees.frm.old employees.frm
root@localhost*5.5.48-log[test] >\! chown mysql.mysql employees.frm
root@localhost*5.5.48-log[test] >flush tables;
root@localhost*5.5.48-log[test] >select first_name from employees where first_name like 'a%' limit 1;
Empty set (0.00 sec)

查看错误日志:

[ERROR] Table test/employees contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
root@localhost*5.5.48-log[test] >explain select first_name from employees where first_name like 'a%' limit 1;
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | employees | ALL | NULL | NULL | NULL | NULL | 1 | Using where |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

可以看到语句是走不到索引的,语句分析和优化是mysql server完成?

  • 然后恢复创建索引后的frm文件:
root@localhost*5.5.48-log[test] > mv employees.frm.2 employees.frm – `employees.frm.2之前备份了`
root@localhost*5.5.48-log[test] >flush tables;
Query OK, 0 rows affected (0.02 sec)
root@localhost*5.5.48-log[test] >explain select first_name from employees where first_name like 'a%' limit 1;
+----+-------------+-----------+-------+----------------+----------------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+-------+----------------+----------------+---------+------+------+--------------------------+
| 1 | SIMPLE | employees | index | idx_first_name | idx_first_name | 58 | NULL | 1 | Using where; Using index |
+----+-------------+-----------+-------+----------------+----------------+---------+------+------+--------------------------+
1 row in set (0.00 sec)
root@localhost*5.5.48-log[test] >alter table employees engine=innodb;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@localhost*5.5.48-log[test] >flush tables;
Query OK, 0 rows affected (0.04 sec)
root@localhost*5.5.48-log[test] >explain select first_name from employees where first_name like 'a%' limit 1;
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | employees | ALL | NULL | NULL | NULL | NULL | 1 | Using where |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

然后恢复有索引的frm文件

root@localhost*5.5.48-log[test] >flush tables;
Query OK, 0 rows affected (0.04 sec)
root@localhost*5.5.48-log[test] >show create table employees\G;
*************************** 1. row ***************************
Table: employees
Create Table: CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` enum('M','F') NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`),
KEY `idx_first_name` (`first_name`) – `索引是可以看到,查frm文件`
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
ERROR:
No query specified

但是日志会报如下错,说明存储引擎的索引已经在执行alter table employees engine=innodb;删除(重建表基于frm定义) :

160508 17:44:01 [ERROR] Table test/employees contains 1 indexes inside InnoDB, which is different from the number of indexes 2 defined in the MySQL
160508 17:44:01 [ERROR] Innodb could not find key n:o 1 with name idx_first_name from dict cache for table test/employees
160508 17:44:01 [ERROR] Table test/employees contains fewer indexes inside InnoDB than are defined in the MySQL .frm file. Have you mixed up .frm files from different installations? See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html

© 著作权归作者所有

AnthonyYau
粉丝 29
博文 85
码字总数 93611
作品 0
广州
数据库管理员
私信 提问
MySQL EXPLAIN Extra列的信息

MySQL EXPLAIN Extra列的信息 这一列包含的是不适合在其他列显示的额外信息。 Using where 这意味着mysql服务器将在存储引擎检索行后再进行过滤。许多where条件里涉及索引中的列,当它如果...

秋风醉了
2015/08/23
460
0
MySQL/MariaDB基础

大致来讲数据库管理系统发展历程就是: 层次模型 --> 网状模型 --> 关系模型 --> No-SQL 这里我们主要来说说关系型数据库: 1.表 对于关系型数据库而言,最基本的数据管理单位为表,也称为二...

long44
2018/07/23
0
0
MYSQL企业级应用(二)体系结构

2.1 MYSQL服务结构mySQL是一个典型的c/s模式,由服务端和客户端组成。服务端:mysqld客户端:mysql客户端自带程序:mysql,mysqladmin,mysqldump等2.2 MYSQL连接方式TCP/IP连接方式套接字连...

余8520
2017/12/26
0
0
MySQL数据库常见存储引擎(一)

熟悉mysql数据库的朋友,肯定会喜欢mysql强大的插件式存储引擎,能够支持太多存储引擎,当目前的存储引擎不能满足你的需求时,你可以根据自己的需求选择合适的引擎,将相关的文件拷贝到相关路...

tianya1993
2017/05/16
0
0
「mysql优化专题」本专题总结终章(13)

一个月过去了,【mysql优化专题】围绕着mysql优化进行了十三篇的优化文章,下面进行一次完整的总结!我尝试用最简短最通俗易懂的话阐述明白每篇文章,让本专题画上完美的句号!坚持到文末,留...

java进阶架构师
2018/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部