数据恢复

mysql数据库修复

       mysql数据恢复,mysql数据库修复

故障类型:  1.   ibdata1、MYI、MYD损坏;

                  2. 数据库表记录删除。

典型特征:  1. 数据库无法进行查询等操作;

                  2. 使用mysqlcheck和myisamchk无法修复数据库;

                  3.  数据库表中无任何数据或只有部份数据;

                  4.  客户端无法查询到完整的信息。

恢复方案

检测流程

                  1. 对损坏的数据库进行备份,保证原盘数据不被破坏;

                  2. 使用磁盘编辑器等对MYD、MYI和ibdata1文件进行内部结构检测与分析。

恢复流程

                  1. 所有恢复操作在备份文件上进行,避免二次损坏;

                  2. 通过自主开发的程序修复损坏的索引或数据文件;

                  3. 通过专业工具提取数据,生成数据库;

                  4. 针对数据库表记录删除,把恢复后的数据表插入原数据库,对数据库做完整性检测。

验收流程

                  1. 挂载数据库,启动服务;

                  2. 对数据库做mysqlcheck检测;

                  3. 对重要表进行数据查询,查询数据库最新记录,检验数据的更新日期。



恢复的成功率&时间评估

                  1. 数据库的表记录删除后,如未做其它任何操作,因MYD内容结构的原因,数据恢复成功率不可达到100%;

                  2. 数据库ibdata1、MYI、MYD损坏的成功率视其损坏程序而定,时间视数据库大小而定,一般时间约2-5个工作日。



MySQL表损坏一般是数据损坏,引起损坏的原因可能是由于磁盘损坏、系统崩溃或者MySQL服务器被崩溃等外部原因。例如有人使用kill -9终止进程,导致MySQL进程未能正常关闭,那么就很有可能导致数据损坏。

对于不同的引擎,数据损坏修复的方式不一样,作为一般情况可以尝试使用CHECK TABLE和REPAIR TABLE命令修复。

MyISAM损坏的修复方案

MyISAM损坏有两种修复方式:

1.通过SQL修复MyISAM表:

查看表是否损坏:

mysql> CHECK TABLE t1;

+---------------+-------+----------+----------+| Table         | Op    | Msg_type | Msg_text |

+---------------+-------+----------+----------+| db1.t1 | check | status   | OK       |

+---------------+-------+----------+----------+1 row in set (0.00 sec)1234567

修复表:

mysql> repair table t1;

+---------------+--------+----------+---------------------------------------------------------+| Table         | Op     | Msg_type | Msg_text                                                |

+---------------+--------+----------+---------------------------------------------------------+| db1.t1 | repair | note     | The storage engine for the table doesn't support repair |

+---------------+--------+----------+---------------------------------------------------------+1 row in set (0.00 sec)1234567

如果单纯执行REPAIR TABLE没有起到什么效果,那么可以选择另外两个选项:

- REPAIR TABLE EXTENDED,速度比REPAIR TABLE慢得多,但是可以修复99%的错误;

- REPAIR TABLE USE_FRM,它会删除索引并利用table_name.frm文件中的描述重建索引,并通过table_name.MYD文件填充健对应的值。

2. 使用myisamchk修复MyISAM

myisamchk可以直接访问表文件,而无须启动MySQL服务器。

进入datadir文件目录,执行基本命令:

myisamchk --backup --recover t11

其中,--backup选项是在尝试修复表之前先进行数据文件备份,还有其他使用选项就不一一介绍了。

InnoDB数据损坏修复

InnoDB是带有事务的存储引擎,并且其内部机制会自动修复大部分数据损坏错误,它会在服务器启动时进行修复。

不过,有时候数据损坏得很严重并且InnoDB无法在没有用户交互的情况下完成修复,在这种情况下,有--innodb_force_recovery启动选项。

该选项可以设置0~6(0 不强制修复 1是最低级别 6最高级别)。  

如果发生损坏,可以从1开始尝试修复,直到可以启动服务器并且可以访问有问题的表为止.

启动后使用select into outfile将表转储到文件中,然后使用drop和create命令重新创建表,最后用--innodb_force_recovery=0重新启动服务器,然后加载文件数据。

当需要在--innodb_force_recovery选项是正数的情况下修复数据库时,错误日志通常会有明确的提示信息。

--------------------- 本文来自 yinnnnnnn 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_35440678/article/details/60321689?utm_source=copy 



相关文章