テスト:の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