【Mysql】从binlog中找出单个表的binlog信息

  无聊研究binlog写了个提取单个表的binlog的信息,便于误删恢复数据,这样做的目的是为了减少恢复时其他表可能引起的出的错,以及缩短恢复时间
  首先研究binlog日志的格式
     
      <李>      李   <李>   强,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,- - - - - - -到第一个承诺为第一部分为binlog必须的,缺失会报错
      # 494
      559 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 xef3ac14c anonymous_gtid last_committed=1 sequence_number=2
      设置@@SESSION。GTID_NEXT=涿?* ! */;
      # 559
      162 # 160229 15:18:07服务器id, end_log_pos 631 CRC32 0 xe834f1d8查询thread_id=102887 exec_time=350 error_code=0
      设置时间戳=1456730287/* ! */;
      开始
    /* ! */;
      # 631
      683 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 xc64ac724 <强> Table_map:“测试”。“泰”映射到127号
      # 683
      803 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 x4a5f1c75 Write_rows:表id 127旗帜:STMT_END_F
      BINLOG '
      r/DTVhOiAAAANAAAAKsCAAAAAH8AAAAAAAEABHRlc3QAAnR5AAQDDw8DBBQAFAAPJMdKxg==
      r/DTVh7iAAAAeAAAACMDAAAAAH8AAAAAAAEAAgAE//AFAAAABEVFRUUCQzFfAAAA8AEAAAAEQUFB
      QQJDMUMAAADwAwAAAARDQ0NDAkMxQwAAAPAEAAAABEREREQCQzFBAAAA8AIAAAAEQkJCQgJDMTcA
      AAB1HF9K
    /* ! */;
      # 803
      834 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 x96148022 Xid=77
      
      
      
      提交/* ! */;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,- - - - - -到下一个承诺为第二部分,一个事物语句,可以缺失
      # 834
      899 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 xa1e52982 anonymous_gtid last_committed=2 sequence_number=3
      设置@@SESSION。GTID_NEXT=涿?* ! */;
      # 899
      162 # 160229 15:18:07服务器id, end_log_pos 971 CRC32 0 x89fc0e48查询thread_id=102887 exec_time=359 error_code=0
      设置时间戳=1456730287/* ! */;
      开始
    /* ! */;
      # 971
      1023 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 xc1309696 <强> Table_map:“测试”。“泰”映射到127号
      # 1023
      1143 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 x0993d08b Write_rows:表id 127旗帜:STMT_END_F
      BINLOG '
      r/DTVhOiAAAANAAAAP8DAAAAAH8AAAAAAAEABHRlc3QAAnR5AAQDDw8DBBQAFAAPlpYwwQ==
      r/DTVh7iAAAAeAAAAHcEAAAAAH8AAAAAAAEAAgAE//AFAAAABEVFRUUCQzFfAAAA8AEAAAAEQUFB
      QQJDMUMAAADwAwAAAARDQ0NDAkMxQwAAAPAEAAAABEREREQCQzFBAAAA8AIAAAAEQkJCQgJDMTcA
      AACL0JMJ
    /* ! */;
      # 1143
      1174 # 160229 15:18:07服务器id 162, end_log_pos CRC32 0 x7c2054fd Xid=101
      
      
      
      ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.....省略,,,,,,,,,,,,,,,,,,,,,,,,
      
      
      
      
      提交/* ! */;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,- - - - - - -最后一个提交到最后必须存在
      设置@@SESSION。GTID_NEXT='自动' mysqlbinlog添加的/* *//* ! */;
      分隔符;
      #结束日志文件
    /* !50003集COMPLETION_TYPE=@OLD_COMPLETION_TYPE */;
    /* !50530集@@SESSION.PSEUDO_SLAVE_MODE=0 */;
         李   
     思路就是先将第一部分以及最后一部分提取出来,我们csplite文件(以提交为分隔标示,不熟悉csplit命令的先去熟悉一下用法),在第一以及最后一部分中间插入单个表的binlog信息而拼接成一个符合binlog格式的日志文件
  
  
     
      <李>      李   <李>      李   
     
  
  
  测试:
  
     
      <李>      李   <李>      李   <李>      李   <李>      李   <李>      李   <李>   
         李   
  
      <李>      李   <李>      李   <李>      李   <李>      李   
     mysql -uroot - p 'cat/etc/sqlpass TENNIS<网球。sql,——恢复备份
  
  [root@localhost chenliang] # sh v1。sh - binlog=mysqlbin。000019年,数据库表==网球——团队,推荐- - - - - -提前单表的binlog信息
        

  点击()折叠或打开   

        
      <李>      李   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

    【Mysql】从binlog中找出单个表的binlog信息