python mysqlのbinlogの特定のテーブルを分析し、削除記録を記録

テスト:のpython 3.5、MySQLの5.7

MySQLの参数:binlog_rows_query_log_events = ON; binlog_format =行

コード:UTF-8 
インポートOS 


del_sql_file = R " /export/bak/del_file.txt " 
binlog_scr = R " LS /export/data/mysql/data/mysql-bin.0* " 
binlog_list = os.popen(binlog_scr) .readlines() 

循环读取所有binlogの
ため log_line binlog_list:
     場合 lenは(log_line)> 0:
        binlog_file = log_line.strip()
         プリント(binlog_file) 

        解析binlogの 
        COMN = R " /エクスポート/サーバは/ mysqlの/ binに/ mysqlbinlogは-vvv {} ".format(binlog_file)
        binlog_sql = os.popen(COMN).readlines()
        del_sql = "" 
        new_sql_flag = Falseの

        ためのライン:binlog_sql 
            lower_line = line.lower()
            记录含有削除的原生SQL 
            の場合 、 " 削除"   lower_line  lower_line.count(" ")== 1  " サーバID "  しない lower_line:
                new_sql_flag =
                del_sql = ライン
             のelif  " AT#"  lower_line:
                new_sql_flag = ELIFの:new_sql_flag
                 ネイティブSQL複数行、複数列を組み合わせた 
                del_sql = " {} {} " .format(del_sql、ライン)

            IF line.find (" Table_map:")> 0:
                取得タイムスタンプ 
                。START_INDEX 1 = 
                END_INDEX = line.index(" サーバID "、中START_INDEX)
                CURRENT_TIME = ライン[中START_INDEX:END_INDEX] .strip() 

                GETライブラリ名、テーブル名 
                tb_start_index = line.index(" Table_map "、中START_INDEX)+ 11 
                tb_end_index = line.index(" マッピングされた" 、tb_start_index)
                table_info =行[tb_start_index:tb_end_index]。.strip()を置き換える(" ` """ )

                レコードをファイルに特定のテーブルについての削除情報
                IF  " rt_out_orders_m "   table_info  lenは(del_sql)>0:
                    オープン(del_sql_fileと"A + "、コード= "UTF-8 " :)AS F 
                        f.write(" {} {} \ N- " .format(CURRENT_TIME、table_info))
                        f.write(del_sql) MET Table_mapキーワードに、空、再記録del_sqlます 
                = del_sqlを「」

                

 

テスト結果:

200320 23時01分02秒ob_task.rt_out_orders_m
RECEIPT_NO = 'EBS4418047049205'限度10 ob_task.rt_out_orders_m FROM#DELETE
200320 23時01分02秒はob_task.rt_out_orders_m
10 ob_task.rt_out_orders_m WHERE RECEIPT_NO = 'EBS4418047040735'限界FROM#DELETE
23:01 200320 :02 ob_task.rt_out_orders_m
ob_task.rt_out_orders_m FROM#DELETE WHERE RECEIPT_NO = 'EBS4418047051006'リミット10

おすすめ

転載: www.cnblogs.com/broadway/p/12543902.html