mysql innodb repair_MySQL数据库INNODB 表损坏修复处理过程 无法repair的变通方法
突然收到mysql报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,下次遇到就不会这么手忙脚乱了。
处理过程:
一遇到报警之后,直接打开错误日志,里面的信息:InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 30506.
InnoDB: You may have to recover from a backup.
130509 20:33:48 InnoDB: Page dump in ascii and hex (16384 bytes):
##很多十六进制的代码
……
……
InnoDB: End of page dump
130509 20:37:34 InnoDB: Page checksum 1958578898, prior-to-4.0.14-form checksum 3765017239
InnoDB: stored checksum 3904709694, prior-to-4.0.14-form stored checksum 3765017239
InnoDB: Page lsn 5 614270220, low 4 bytes of lsn at page end 614270220
InnoDB: Page number (if stored to page already) 30506,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 19
InnoDB: Page may be an index page where index id is 54
InnoDB: (index "PRIMARY" of table "maitem"."email_status")
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 30506.
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.5/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
InnoDB: A new raw disk partition was initialized or
InnoDB: innodb_force_recovery is on: we do not allow
InnoDB: database modifications by the user. Shut down
InnoDB: mysqld and edit my.cnf so that newraw is replaced
InnoDB: with raw, and innodb_force_... is removed.
130509 20:39:35 [Warning] Invalid (old?) table or database name '#sql2-19c4-5'
从错误日志里面很清楚的知道哪里出现了问题,该怎么处理。这时候数据库隔几s就重启,所以差不多可以说你是访问不了数据库的。所以马上想到要修复innodb表了。
以前在Performance的blog上看过类似文章。
当时想到的是在修复之前保证数据库正常,不是这么异常的无休止的重启。所以就修改了配置文件的一个参数:innodb_force_recovery//innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。
//当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
因为错误日志里面提示出现了坏页,导致数据库崩溃,所以这里把innodb_force_recovery 设置为1,忽略检查到的坏页。重启数据库之后,正常了,没有出现上面的错误信息。找到错误信息出现的表:
(index "PRIMARY" of table "maitem"."email_status")
数据页面的主键索引(clustered key index)被损坏。这种情况和数据的二级索引(secondary indexes)被损坏相比要糟很多,因为后者可以通过使用OPTIMIZE TABLE命令来修复,但这和更难以恢复的表格目录(table dictionary)被破坏的情况来说要好一些。
操作步骤:
因为被破坏的地方只在索引的部分,所以当使用innodb_force_recovery = 1运行InnoDB时,操作如下:
执行check,repair table 都无效
alter table email_status engine =myisam; #也报错了,因为模式是innodb_force_recovery =1。
ERROR 1025 (HY000): Error on rename of '...' to '....' (errno: -1)
建立一张表:create table email_status_bak #和原表结构一样,只是把INNODB改成了MYISAM。把数据导进去insert into email_status_bak select * from email_status;
删除掉原表:
drop table email_status;
注释掉innodb_force_recovery 之后,重启。
重命名:
rename table edm_email_status_bak to email_status;
最后该回存储引擎
alter table edm_email_status engine = innodb
总结:
这里的一个重要知识点就是 对 innodb_force_recovery 参数的理解了,要是遇到数据损坏甚至是其他的损坏。可能上面的方法不行了,需要尝试另一个方法:insert into tb select * from ta limit X;甚至是dump出去,再load回来。
mysql innodb repair_MySQL数据库INNODB 表损坏修复处理过程 无法repair的变通方法相关推荐
- mysql innodb表损坏_MySQL数据库INNODB表损坏修复处理过程分享
##状况描述 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了.innodb表损坏不能通过repair table 等修复myisam的命令操作.现在记录下解决 ...
- SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复
SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复 开发此工具是为了 让手工恢复数据库物理故障时 更加简单便捷直观, 本工具用于物理修复独立处理大部分问题以及与DBCC配合完成修复各种数据库错 ...
- mysql user表 空_安装mysql发现mysql对应的数据库user表内容是空的
安装mysql发现mysql对应的数据库user表内容是空的: 所以在使用root登录始终都不能成功. 后来查看了一下日志发现: [root@n1 mysql]# mysql_install_db - ...
- mysql数据库表损坏修复方法(适用虚拟主机)
1.主机控制面板修复 在虚拟主机控制面板或独立控制面板中点击"数据库",用控制面板中提供的"修复数据库"功能,可以在线修复. 2.使用phpmyadmin进行修 ...
- MySQL学习_数据库和表的基本操作
目录 1 创建和查看数据库 1.1 创建数据库 1.2 查看数据库 1.3 修改数据库 1.4 删除数据库 2 数据类型 2.1 整数类型 2.2 日期数据类型 2.3 字符串数据类型 3表的基本操作 ...
- 使用mysql,建数据库建表操作
在windows启动mysql 将mysql安装好之后,记得配置好环境. 打开cmd,输入命令:mysql -u root -p,输入密码,回车出现下面界面即可: 到了此时即可进行下面建数据库,访问到 ...
- 定义mysql字段的编码模式_在 mysql 中 定义 数据库,表,列时,设定的各个的编码格式。...
最近看了一下KIGG框架,发现在用EF + MYSQL数据库时,数据出现了乱码,用工具(Navicat )查看一下表category的结构发现 KIGG 数据库的默认情况是用latin1编码的(DEF ...
- linux mysql清除数据库所有表_MySQL修复指定数据库下的所有表
mysql,mariadb,percona 这几天数据库频繁crash,查看日志发现类似如下的错误: [ERROR] mysqld: Table './database/pre_forum_forum ...
- mysql表损坏监控_监控mysql启动情况并检测表错误修复
给开发部同事用的测试服务器上MYSQL经常挂掉...都懒得理了..写了个脚本自己检测错误修复表继续运行..邮件报警功能等有空再补上去... #!/bin/env bash PATH=/bin:/sbi ...
最新文章
- 网络2网络布线与数制转换
- php:Mcrypt响应慢的原因解决备注
- ShareEntryActivity java.lang.ClassNotFoundException | Android类找不到问题
- Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型
- 深入理解最大池化为什么能够实现不变性?
- H3CNE新版本V6.0与旧版本V5.1的区别
- jsp文件能转换html吗,html怎么转换成jsp
- CSS之Multi-columns的列数和列宽
- 【理论】数据结构----树的基本概念
- jsp怎么接受ajax请求参数,通过ajax发送JSON并通过JSP中的请求获取参数
- wamp phpcms部署网站问题
- 作业帮电脑版在线使用_应届生应聘作业帮的在线辅导老师
- matlab打开慢的原因,Matlab运行速度/效率受哪些因素影响?
- 图片API 通用接口
- 读取文件云服务器bcc,读取文件云服务器bcc
- 统计学 假设检验(Hypothesis Testing)
- iOS——编译与链接
- np.savetxt()和np.loadtxt()
- 用统信uos安装docker并运行项目
- 生活小常识日常生活小常识
热门文章
- 一种基于深度学习的单导联心电信号睡眠呼吸暂停检测方法
- 美的空气能计算机故障维修,美的空气能故障代码,常见故障原因汇总,勿要错过...
- 变更请求、批准的变更、确认的变更
- 在xp中tc环境下实现的 销售管理系统(可切换繁体和简体,可设密码,可通过修改代码修改字体颜色)
- Android Studio 在MuMu模拟器上实现 xposed简单劫持
- TOP30排行榜 第04期:花5万元刷榜能上No.1
- 格式工厂-格式转换器(老版本)
- java实现第三届蓝桥杯地址格式转换
- 树莓派4B系统一键安装opencv,再也不要用编译安装啦!(支持buster、bullseye)
- Category 类别 -Objective-C