文档章节

5.6中删除ibdata1之后的报错

stayfool
 stayfool
发布于 2014/02/08 13:42
字数 808
阅读 1961
收藏 1

今天做测试时,查看错误日志发现有报错

2014-02-08 09:55:33 16545 [Warning] InnoDB: Cannot open table bit/inside_log from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2014-02-08 09:55:33 16545 [ERROR] Failed to open table bit/inside_parameters#P#p201311.
2014-02-08 09:55:33 16545 [Warning] InnoDB: Cannot open table bit/inside_parameters#P#p201311 from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2014-02-08 09:55:33 b6cc0b70 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.

原因是:innodb在.frm中存放了表的信息,但是同时也在数据字典中存放有表信息

此时可能是直接操作了数据文件而数据字典没来得及更新服务器便挂掉了导致不一致

drop table inside_parameters;

更新数据字典,同时会自动删除数据文件

2014-02-08 10:05:56 16545 [Warning] InnoDB: Cannot open table bit/inside_parameters#P#p201311 from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: table `bit`.`inside_parameters` /* Partition `p201311` */ does not exist in the InnoDB internal
InnoDB: data dictionary though MySQL is trying to drop it.
InnoDB: Have you copied the .frm file of the table to the
InnoDB: MySQL database directory from another database?
InnoDB: You can look for further help from
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: table `bit`.`inside_parameters` /* Partition `p201312` */ does not exist in the InnoDB internal
InnoDB: data dictionary though MySQL is trying to drop it.
InnoDB: Have you copied the .frm file of the table to the
InnoDB: MySQL database directory from another database?
InnoDB: You can look for further help from
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: table `bit`.`inside_parameters` /* Partition `p201401` */ does not exist in the InnoDB internal
InnoDB: data dictionary though MySQL is trying to drop it.
InnoDB: Have you copied the .frm file of the table to the
InnoDB: MySQL database directory from another database?
InnoDB: You can look for further help from
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2014-02-08 10:06:05 b6cc0b70 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.

此时一直提示innodb_table_stats表不存在

查阅官方文档之后发现是5.6的新特性

在MySQL 5.6之前,如果关闭MySQL后删除ibdata1,再重新启动MySQL的时候ibdata1会被重新创建. 但从MySQL 5.6开始,这5个表不会被重建.即使删除了ibdata1,下面的10个文件仍然保留在/var/lib/mysql/mysql中(假如datadir = /var/lib/mysql/):

innodb_index_stats.frm
innodb_index_stats.ibd
innodb_table_stats.frm
innodb_table_stats.ibd
slave_master_info.frm
slave_master_info.ibd
slave_relay_log_info.frm
slave_relay_log_info.ibd
slave_worker_info.frm
slave_worker_info.ibd

在安装MySQL 5.6,使用mysql_install_db做初始化的时候需要指定–defaults-file选项,按照自定义的my.cnf里面的参数去初始化,而不能采用和5.5一样的方法删除之前的ibdata1文件后再重新生成新,因为MySQL 5.6在mysql系统库下引入上述的5个innodb表。否则启动mysqld的时候会出现我之前的警告信息

解决办法,从新库中导出这5个表再导入到现有库中

#!/bin/bash

TABLELIST="innodb_index_stats"
TABLELIST="${TABLELIST} innodb_table_stats"
TABLELIST="${TABLELIST} slave_master_info"
TABLELIST="${TABLELIST} slave_relay_log_info"
TABLELIST="${TABLELIST} slave_worker_info"
mysqldump -uroot -p mysql ${TABLELIST} > mysql_innodb_tables.sql

将文件拷贝回现有库
# mysql -uroot -p mysql < mysql_innodb_tables.sql

OK!

© 著作权归作者所有

共有 人打赏支持
stayfool
粉丝 2
博文 16
码字总数 9906
作品 0
深圳
数据库管理员
MySQL · 最佳实践 · 空间优化

在前三期介绍了RDS for MySQL参数优化,锁问题以及延迟优化最佳实践之后,本期将介绍存储空间相关的最佳实践。 存储空间是RDS很重要的一个指标,在RDS的工单问题中,空间问题的咨询可以排在t...

阿里云RDS-数据库内核组
2016/06/09
0
0
InnoDB--------独立表空间平滑迁移

1. 背景 * InnoDB的表空间可以是共享的或独立的。如果是共享表空间,则所有的表空间都放在一个文件里:ibdata1,ibdata2..ibdataN,这种情况下,目前应该还没办法实现表空间的迁移,除非完全迁...

asd1123509133
2017/07/20
0
0
在docker中使用MySQL数据库

概述 我是一直想把所有的程序都跑在docker里面,这样一方面是为了便于管理,另外一方面也可以增强自己对docker的理解,所以今天我就想学习一下最重要的数据库部分 让mysql数据库在docker下跑...

bboysoulcn
04/20
0
0
RDS全量物理备份谁才能读

有个客户有个需求:想把5.6版本的RDS for MySQL上周的数据呈现出来,和现在的数据进行比对,以进行其他业务操作。那么该怎么办呢? 方法有两个: 1.使用RDS for MySQL自带的方便快捷的恢复方...

newdba@dtstack
2017/12/18
0
0
MySQL · 答疑解惑 · 外键删除bug分析

背景 你是否曾为这样的错误而不解,如stackoverflow上的这个问题? 下面我们来复现下: 5.5的表现 5.6的表现 很明显5.6的报错信息更精确些,5.5的报错太不人性化了,容易造成误解。 它们差别...

阿里云RDS-数据库内核组
2015/07/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部