2011年11月1日 星期二

MySQL 數據恢復

若 /etc/mysql/my.cnf 有設定 log_bin, 則可以透過 mysqlbinlog 分析歷史紀錄來復原


如果你用的myisam的存储引擎,如果你用的是delete from tbl;则MyISAM会直接将MYD文件长度清空。这时,你的数据还在磁盘上(文件中第一簇坏掉了,会丢一点数据)!这种情况下,找专门的数据恢复人员 (如果你非常熟悉操作系统的磁盘格式,当然你也可以自已一个扇区一个扇区把数据拿出来拼接)

如果你用的innodb, 则数据还不会被马上从文件中删除,这时备份下你的ibdata*,ib_logfile*,然后找innodb的开发人员帮你从文件中找出这些数据。(如果你愿意仔细研究一下innodb的数据格式的话,也是可以的,你的数据会在数据文件和日志文件中都有,关键是要有人懂它的文件数据格式)



DELETE实际上是把ROW的5byte头信息中的IS_DELETE位置为1,并不是真的删除,还可以通过程序直接读取ibd文件读出来,InnoDB格式可以参考姜承尧的书。MyISAM格式可以参考Steven_1981的博客。
但是truncate是真的把数据文件重建为初始状态,那没辙了。




Reference :
使用mysqlbinlog恢复数据 - 其他数据库开发 / MySQL/Postgresql
【求救】误删MySql数据库中一个表中的表数据,如何恢复? - 其他数据库开发 / MySQL/Postgresql
江湖救急,恢复单张表误删的数据! - MySQL数据库开发 - 开发者社区
mysql (MyIsAm表) delete 误删了数据如何恢复 - dandan&guangguang的日志 - 网易博客
MYSQL数据库误删除恢复笔记 - 程序互联 - 36战商会 商业,心理,智慧,互联网|身心灵,财富,成长,家园|积极,热情,洋溢滴,欢迎您回家 - Powered by Discuz!
Steven_1981的博客

沒有留言:

張貼留言