免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1451 | 回复: 1
打印 上一主题 下一主题

MySQL使用二进制日志恢复数据库 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-07-11 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-10 13:49 |只看该作者 |倒序浏览
一、二进制日志简介

MySQL有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制文件恢复。

在my.ini文件中设置了log-bin,重新启动MySQL后就开启了二进制日志。数据库每次重新启动(或执行flush logs命令)后,都会生成一个新的二进制日志,如在在my.ini文件中设置了
  1. log-bin=F:\mysqllog\logbin
复制代码
则数据库第一次启动会生成logbin.000001,第二次启动会生成logbin.000002,第三次启动会生成logbin.000003,......,以此类推。

二、数据恢复实例

1. 为了便于说明,执行flush logs命令,生成一个新的二进制文件;

2. 打开bookstore数据库中的authors表,里面已经有3条数据,在里面新插入两条数据,即第4条和第5条数据;

3. 假设由于操作失误,将第4条和第5条数据删除了;

4. 这时就考虑用二进制文件恢复第4条和第5条数据了,打开二进制文件的路径,发现有很多二进制日志文件,

其中编号最大的000030是最新的,记录了前面所述的记录插入和删除操作;
5. 首先查看一下这个文件,运行以下命令将其转换成文本文件,

打开文本文件,可以看见记录下了记录的插入和删除操作。
  1. /*!40019 SET @@session.max_insert_delayed_threads=0*/;
  2. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
  3. DELIMITER /*!*/;
  4. # at 4
  5. #150204 20:24:10 server id 1  end_log_pos 107     Start: binlog v 4, server v 5.5.25-log created 150204 20:24:10
  6. # Warning: this binlog is either in use or was not closed properly.
  7. BINLOG '
  8. ag/SVA8BAAAAZwAAAGsAAAABAAQANS41LjI1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  9. AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
  10. '/*!*/;
  11. # at 107
  12. #150204 20:25:40 server id 1  end_log_pos 180     Query    thread_id=8    exec_time=0    error_code=0
  13. SET TIMESTAMP=1423052740/*!*/;
  14. SET @@session.pseudo_thread_id=8/*!*/;
  15. SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
  16. SET @@session.sql_mode=1344274432/*!*/;
  17. SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
  18. /*!\C utf8 *//*!*/;
  19. SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
  20. SET @@session.lc_time_names=0/*!*/;
  21. SET @@session.collation_database=DEFAULT/*!*/;
  22. BEGIN
  23. /*!*/;
  24. # at 180
  25. #150204 20:25:40 server id 1  end_log_pos 369     Query    thread_id=8    exec_time=0    error_code=0
  26. use bookstore/*!*/;
  27. SET TIMESTAMP=1423052740/*!*/;
  28. INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (4, 'Li', 'Si', 'China')
  29. /*!*/;
  30. # at 369
  31. #150204 20:25:40 server id 1  end_log_pos 557     Query    thread_id=8    exec_time=0    error_code=0
  32. SET TIMESTAMP=1423052740/*!*/;
  33. INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (5, 'Wang', 'Wu', 'US')
  34. /*!*/;
  35. # at 557
  36. #150204 20:25:40 server id 1  end_log_pos 584     Xid = 391
  37. COMMIT/*!*/;
  38. # at 584
  39. #150204 20:45:31 server id 1  end_log_pos 657     Query    thread_id=8    exec_time=0    error_code=0
  40. SET TIMESTAMP=1423053931/*!*/;
  41. BEGIN
  42. /*!*/;
  43. # at 657
  44. #150204 20:45:31 server id 1  end_log_pos 780     Query    thread_id=8    exec_time=0    error_code=0
  45. SET TIMESTAMP=1423053931/*!*/;
  46. DELETE FROM `bookstore`.`authors` WHERE `author_id`='4'
  47. /*!*/;
  48. # at 780
  49. #150204 20:45:31 server id 1  end_log_pos 903     Query    thread_id=8    exec_time=0    error_code=0
  50. SET TIMESTAMP=1423053931/*!*/;
  51. DELETE FROM `bookstore`.`authors` WHERE `author_id`='5'
  52. /*!*/;
  53. # at 903
  54. #150204 20:45:31 server id 1  end_log_pos 930     Xid = 407
  55. COMMIT/*!*/;
  56. DELIMITER ;
  57. # End of log file
  58. ROLLBACK /* added by mysqlbinlog */;
  59. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
复制代码
6. 开始恢复数据,执行以下命令,

之所以要有一个--stop-pos=584参数,是因为从584开始,就在删除记录了,所以在584就应该停止。执行命令以后,再次打开authors表,可以看见第4、5条数据被恢复了!

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-07-23 11:06 |只看该作者
我曾经这么恢复过。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP