修复实例

2017-03-10 15:48刘进京
网络安全和信息化 2017年2期
关键词:二进制字段数据表

例如,名称为“ziliao.ibd”的数据表文件发生损坏,当MySQL数据库重启之后,执行“select* from ziliao;”之类的命令,对该数据表进行查询 时,会 显 示“MySQL server has gone away”等提示信息,说明访问连接已经断开,数据库实际上崩溃了,自然无法从中读取数据。执行“vi /etc/my.cnf” 命 令,打开MySQL配置文件,在其 中 的“[mysqld]” 节中 添 加“innodb_force_recovery=1”,表示采用第一种修复模式。输入“:wq”保存该文件。执行“service mysql restart”命令,重启MySQL数据库。

如果直接执行“select* from ziliao;”命令,依然无法顺利执行。为了可以尝试读取该表中前一些行的记录。例如执行“select* from ziliao limit 500”命令,来读取其前500行数据。当读取成功后,执行“create table repairzl(xxx)engine=myisam;”命令,使用MYISAM引擎创建名为“repairzl”的新表,字段结构应该和“ziliao”表完全相同,其中的“xxx”表示具体的字段。执行“insert into repairzl select *ziliao limit 500;”命令,从“资料”表中读取前500行数据,将其导入到“repairzl”表 中。 执 行“drop table ziliao;”命令,将“ziliao”表删除。执行“rename table repairzl to ziliao;” 命令,将“repair”表更名为“ziliao”表。

按照上述方法编辑“my.cnf” 文 件, 将“innodb_force_recovery=1”一 行 删除。 执 行“service mysql restart”命令,重启MySQL数据库。执行“alter table ziliao=innodb;”命令,将数据库引擎修改为InnoDB。这样,受损的“ziliao”数据表就修复完成了。注意,对于数据表的修复是无法完整无缺地找回数据的,只能是尽可能地读取并导出数据。如果,存在备份或者二进制日志的话,那么就可以完整地找回数据。如果在数据表中部等位置出现损坏,就需要手工逐行进行探测,来发现大致的损坏位置。

例如,数据表中存在1000行记录,在其中的600行处出现问题,可以按照上述方法进行修复,现将前599行读取出来并导入到新表中。之后再处理之后的记录行,方法基本相同,所不同的地方在于在导入数据时,可以执行诸如“insert ignore into repairzl select* from ziliao recno>600;”命令,将行号大于600之后的数据导入进来,这里的“recno”字段为行号。虽然修复操作可以找回尽可能多的数据,不过为了数据库的安全,最好及时对数据库进行备份。有了备份以及二进制日志文件,就可以很轻松地将数据库恢复到损坏之前的状态。

猜你喜欢
二进制字段数据表
图书馆中文图书编目外包数据质量控制分析
用二进制解一道高中数学联赛数论题
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
有趣的进度
二进制在竞赛题中的应用
基于列控工程数据表建立线路拓扑关系的研究
二进制宽带毫米波合成器设计与分析
CNMARC304字段和314字段责任附注方式解析
图表