首页
登录 | 注册

mysql 数据页损坏解决办法

1.       故障表现。Mysqld 进程持续重启。大量的错误日志:

120906 7:29:43 InnoDB: Page checksum 4195361555, prior-to-4.0.14-form checksum 2124157186
InnoDB: stored checksum 3323954773, prior-to-4.0.14-form stored checksum 2124157186
InnoDB: Page lsn 54 139070759, low 4 bytes of lsn at page end 139070759
InnoDB: Page number (if stored to page already) 134634,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 0
InnoDB: Page may be an index page where index id is 0 89
InnoDB: (index "history_1" of table "zabbix"."history")
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 134634.
InnoDB: You may have to recover from a backup.
InnoDB: It is also possible that your operating
InnoDB: system has corrupted its own file cache
InnoDB: and rebooting your computer removes the
InnoDB: error.
InnoDB: If the corrupt page is an index page
InnoDB: you can also try to fix the corruption
InnoDB: by dumping, dropping, and reimporting
InnoDB: the corrupt table. You can use CHECK
InnoDB: TABLE to scan your table for corruption.
InnoDB: See also http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
InnoDB: Ending processing because of a corrupt database page.

2.       故障原因,这类情况一般有2种情况:mysql 服务异常关闭和硬件磁盘损坏。Innodb 自检过程中checksum与退出时不一致便会去recover,或者退出时bufferflush到磁盘的任务未正常结束并update checksum

3.       解决办法。首先确定出错的数据表。(index "history_1" of table "zabbix"."history")。按下面的顺序尝试。

A.进入mysql,如果mysql持续报错,但mysqld线程稳定,使用check tableoptmize table 进行修复,大部分情况是失败。无响应或者ERROR 2013 (HY000): Lost connection to MySQL server during query

Bmysqld 进程不断重启(由innodb引擎发起的重启),check optimize 几乎无法在一个重启周期内完成。在my.cnf文件增加innodb_force_recovery=1 保证进程稳定。

4. 数据的恢复。

             Check table optmize 其实对innodb效果不明显,所以80%解决不了问题,数据恢复有2种情况。

A. 表数据完整,但checksum不一致,

a)         新建同结构表,engine=myisam

b)         Insert into new select * from old

c)         Alter table new type=innodb

d)         Drop table old,rename table new to old

B. 表数据丢失,这种一般是磁盘损坏,方法和上面一样,区别在于,需要去需找破坏点,找到损坏的数据页面范围,达到最小数据损失。在有主键id的情况下相对容易且损失数据更小。

5. 恢复后在配置文件中注释 innodb_force_recovery=1 ,并重启.


相关文章

  • MySQL数据结构分析--NET
    目的        MySQL网络通信数据结构NET,是基于Vio底层封装,用于实现Client/Server网络通信的基本处理.而核心处理主要是网络通信的读写策略,设计良好的读写策略,可以有效提高网络通信的性能.本文主要通过分析MySQL ...
  • Java数据类型和MySql数据类型对应表 java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 ...
  • MySQL 5.6关闭DNS查询 MySQL服务器的日志记录中看到如下的警告: 2015-11-09 08:37:02 1489 [Warning] IP address '104.223.72.XXX' has been resolved ...
  • 1.使用MyISAM而不是InnoDB MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB. MySQL默认使用的是MyISAM.但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库. ...
  • 内网主机上安装了MySQL数据库,只能在局域网内访问,怎样从公网也能访问本地MySQL数据库? 1. 准备工作 默认安装的MySQL数据库端口是3306. 2.1 下载并解压holer软件包 Holer支持各种OS系统平台,请选择跟本地OS ...
  • Ubuntu 12.04 Freeradius 安装实际过程
             这里介绍下详细的Freeradius2.0在Ubuntu 12.04 x64 操作系统上的安装过程,包括使用MySQL数据作为用户名.密码来源的配置操作,经过下面的步骤可以直接将Ubuntu系统变成AAA认证的生产服务器, ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
苏ICP备12049786号-20