使用背景
????????在進行項目研發(fā),系統(tǒng)維護陨闹、項目監(jiān)控等操作 時項目軟件楞捂、開發(fā)人員家制、DBA總會與數(shù)據(jù)庫進行打交道,但總會在不經(jīng)意的情況下對數(shù)據(jù)造成修改泡一、刪除等操作颤殴。等造成損失時,才發(fā)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)已經(jīng)不完整鼻忠。如果出現(xiàn)以上問題涵但,怎么辦,請看下文帖蔓!
BinLog2sql是什么
binlog2sql是大眾點評開源的一款用于解析binlog的工具
BinLog2sql的功能
從MySQL binlog解析出你要的SQL矮瘟。根據(jù)不同選項,你可以得到原始SQL塑娇、回滾SQL澈侠、去除主鍵的INSERT SQL等。
BinLog2sql使用前提
MySQL 是否開啟日志
show variables like '%log_bin%';
BinLog2sql的安裝(Linux)
項目地址:https://github.com/danfengcao/binlog2sql
1.安裝Git
yum -y install git
2.安裝Pip (如果無法安裝pip,自行百度安裝pip方法)
yum -y install epel-release
yum -y installgit? python-pip
3.安裝binlog2sql
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt
BinLog2sql的參數(shù)說明
mysql連接配置
-h host; -P port; -u user; -p password
解析模式
--stop-never 持續(xù)同步binlog埋酬∩诳校可選。不加則同步至執(zhí)行命令時最新的binlog位置写妥。
-K, --no-primary-key 對INSERT語句去除主鍵拳球。可選珍特。
-B, --flashback 生成回滾語句祝峻,可解析大文件,不受內(nèi)存限制扎筒,每打印一千行加一句SLEEP SELECT(1)莱找。可選嗜桌。與stop-never或no-primary-key不能同時添加奥溺。
解析范圍控制
--start-file 起始解析文件。必須症脂。
--start-position/--start-pos start-file的起始解析位置谚赎。可選诱篷。默認為start-file的起始位置壶唤。
--stop-file/--end-file 末尾解析文件∽厮可選闸盔。默認為start-file同一個文件。若解析模式為stop-never琳省,此選項失效迎吵。
--stop-position/--end-pos stop-file的末尾解析位置躲撰。可選击费。默認為stop-file的最末位置拢蛋;若解析模式為stop-never,此選項失效蔫巩。
--start-datetime 從哪個時間點的binlog開始解析谆棱,格式必須為datetime,如'2016-11-11 11:11:11'圆仔±疲可選。默認不過濾坪郭。
--stop-datetime 到哪個時間點的binlog停止解析个从,格式必須為datetime,如'2016-11-11 11:11:11'歪沃∴氯瘢可選。默認不過濾绸罗。
對象過濾
-d, --databases 只輸出目標db的sql意推。可選珊蟀。默認為空。
-t, --tables 只輸出目標tables的sql外驱∮模可選。默認為空昵宇。
BinLog2sql的使用
查看binlog信息
連接MySQL:mysql -u? -p
查看binlog信息:show master status;
查看sql執(zhí)行日志
python binlog2sql.py -h192.168.1.2?-utestusername?-ptestpsd -dtestdb -ttesttb --start-file='mysql-bin.000051' > delete_log.sql
語句解析:
連接192.168.1.2數(shù)據(jù)庫磅崭,
用戶名:testusername?
密碼:testpsd?
數(shù)據(jù)庫:testdb?
表:testtb? ?(可不使用)
當(dāng)前日志文件信息:mysql-bin.000051
輸出到:delete_log.sql
生成回滾Sql (添加-B命令)
python binlog2sql.py -h192.168.1.2?-utestusername?-ptestpsd -dtestdb -ttesttb?--start-file='mysql-bin.000051' -B > delete_log_rollback.sql?
解析:通過以上條件 執(zhí)行回滾命令,將操作過的sql 反向生成sql.輸出到delete_log_rollback.sql?
執(zhí)行回滾Sql
mysql -utestusername?-ptestpsd < delete_log_rollback.sql
注意事項
1. binlog2sql 可通過時間節(jié)點進行sql篩選
2.binlog2sql 可通過--start-position??--stop-position 來進行語句定位篩選
3. 可使用cat 瓦哎、vi砸喻、vim等工具查看提取出來的sql語句
個人經(jīng)驗
再使用反向生成sql時有時會無法成功,只能通過操作其他方式進行找回之前的數(shù)據(jù)蒋譬,
背景:每日凌晨都有進行自動備份割岛。最多丟失1天數(shù)據(jù)。
根據(jù)現(xiàn)實情況進行方案設(shè)計犯助,通過binlog2sql 獲取執(zhí)行的sql癣漆,獲取相關(guān)表的 insert 和 update 語句,通過自行編寫小程序進行字符整理剂买,得到可執(zhí)行的sql (insert or update) 后惠爽,通過新增和修改 重新生成數(shù)據(jù)
相關(guān)資源
1.flashback
2.MyFlash
3.mysqlbinlog