技術乾貨 | git上2500星的閃回小工具是什麼神仙工具?一起來測測~
生產上發生誤刪資料或者誤更新資料的事故時,傳統恢復方法是利用備份重搭例項,利用binlog來恢復資料,有時候需要找回的資料條數非常少,卻要恢復幾十甚至上百G的備份,費時費力。
那有沒有像Oracle一樣用閃回的方式來方便地恢復資料呢?答案是有的。MySQL有binlog,binlog以event的形式,記錄了MySQL server從啟用binlog以來所有的變化。
關於binlog不做過多贅述,我們可以利用binlog記錄的資訊,在不做備份恢復的情況下來迅速找回誤操作的資料。
MySQL不像Oracle直接一個命令就搞定了,MySQL需要藉助工具來完成,今天我們來測試下git上2500星的閃回小工具。
框架目錄:
1、實驗環境
2、軟體下載
3、開始測試
4、附引數說明
01 實驗環境
作業系統:centos 7
資料庫版本:MySQL 5.7.34
軟體:binlog2sql
02 軟體下載
解壓安裝:
unzip binlog2sql-master.zip
cd binlog2sql-master
pip install -r requirements.txt
MySQL server必須設定以下引數:
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
user需要的最小許可權集合:
select
super/replication client
replication slave
建議授權:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
03 開始測試
許可權說明:
select:需要讀取server端information_schema.COLUMNS表,獲取表結構的元資訊,拼接成視覺化的sql語句
super/replication client:兩個許可權都可以,需要執行'SHOW MASTER STATUS', 獲取server端的binlog列表
replication slave:通過BINLOG_DUMP協議獲取binlog內容的許可權
建立使用者,造實驗資料:
使用sysbench生成測試表,此步驟略
授權使用者:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO test_flash@'%' identified by 'test_flash';
修改資料:
INSERT INTO test_flash.test_flash_tab (`id`, `k`, `c`,`pad`,`test_col1`) VALUES (10001,'5014614','68487932199-96439406143-93774651418-41631865787-96406072701-20604855487-25459966574-28203206787-41238978918-19503783441','22195207048-70116052123-74140395089-76317954521-98694025897',''); update test_flash.test_flash_tab set pad='22195207048-70116052123-74140395089-76317954521-98694025897' where id=10000; delete from test_flash.test_flash_tab where id=9998;
找回資料:
將 binlog2sql-master/binlog2sql 下的內容拷貝到binlog所在的目錄
python binlog2sql.py --flashback -h192.168.176.130 -P5506 -utest_flash -p'test_flash' -dtest_flash -t test_flash_tab --start-file='mysql-bin.000001'
輸出結果:確認無誤後可直接入庫
INSERT INTO `test_flash`.`test_flash_tab`(`c`, `k`, `pad`, `id`, `test_col1`) VALUES ('26540399442-75345224560-23949007931-31007424094-85536370579-90557582232-52492275484-59891643786-99516288129-15346323350', 4994166, '09437973687-45231478323-39177308217-32926675721-14740893381', 9998, NULL); #start 1290 end 1731 time 2021-08-17 19:44:10 UPDATE `test_flash`.`test_flash_tab` SET `c`='34838736059-24362714610-75033330387-17863378665-80928638402-33892306210-78377564998-17324442332-39178876426-77334528413', `k`=4533452, `pad`='11946195857-63616115598-80208325001-42313633529-35180183845', `id`=10000, `test_col1`=NULL WHERE `c`='34838736059-24362714610-75033330387-17863378665-80928638402-33892306210-78377564998-17324442332-39178876426-77334528413' AND `k`=4533452 AND `pad`='22195207048-70116052123-74140395089-76317954521-98694025897' AND `id`=10000 AND `test_col1` IS NULL LIMIT 1; #start 627 end 1259 time 2021-08-17 19:43:59 DELETE FROM `test_flash`.`test_flash_tab` WHERE `c`='68487932199-96439406143-93774651418-41631865787-96406072701-20604855487-25459966574-28203206787-41238978918-19503783441' AND `k`=5014614 AND `pad`='22195207048-70116052123-74140395089-76317954521-98694025897' AND `id`=10001 AND `test_col1`='' LIMIT 1; #start 4 end 596 time 2021-08-17 19:43:47
04 附引數說明
選項,mysql連線配置
-h host; -P port; -u user; -p password
解析模式:
- --stop-never持續解析binlog。可選。預設False,同步至執行命令時最新的binlog位置。
- -K, --no-primary-key 對INSERT語句去除主鍵。可選。預設False 。
- -B, --flashback生成回滾SQL,可解析大檔案,不受記憶體限制。可選。預設False。與stop-never或no-primary-key不能同時新增。
- --back-interval -B模式下,每列印一千行回滾SQL,加一句SLEEP多少秒,如不想加SLEEP,請設為0。可選。預設1.0。
解析範圍控制:
- --start-file 起始解析檔案,只需檔名,無需全路徑,必須。
--start-position/--start-pos起始解析位置。可選。預設為start-file的起始位置。
- --stop-file/--end-file終止解析檔案。可選。預設為start-file同一個檔案。若解析模式為stop-never,此選項失效。
- --stop-position/--end-pos終止解析位置。可選。預設為stop-file的最末位置;若解析模式為stop-never,此選項失效。
- --start-datetime 起始解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。預設不過濾。
- --stop-datetime終止解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。預設不過濾。
物件過濾:
- -d, --databases 只解析目標db的sql,多個庫用空格隔開,如-d db1 db2。可選。預設為空。
- -t, --tables只解析目標table的sql,多張表用空格隔開,如-t tbl1 tbl2。可選。預設為空。
- --only-dml只解析dml,忽略ddl。可選。預設False。
- --sql-type只解析指定型別,支援INSERT, UPDATE, DELETE。多個型別用空格隔開,如--sql-type INSERT DELETE。可選。預設為增刪改都解析。用了此引數但沒填任何型別,則三者都不解析。
Enjoy GreatSQL~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997641/viewspace-2795593/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 等保測評乾貨錦囊,安全管理測評和安全技術測評區別和聯絡是什麼?
- 乾貨 | Dubbo 介面測試技術,測試開發進階必備
- 技術乾貨:關於效能測試面試題及答案面試題
- 乾貨分享:細說雙 11 直播背後的壓測保障技術
- 《舞動星閃耀》3月16日公測!賴美雲等你一起閃耀!
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- 【BGP乾貨】什麼是BGP?有什麼用?
- 【乾貨滿滿】貝塞爾曲線(Bézier curve)——什麼神仙操作
- 乾貨丨軟體測試行業迎來新時代,AI將成為主流技術?行業AI
- 測試網路效能的小工具
- 【網路安全純乾貨分享】漏洞掃描和滲透測試的區別是什麼?
- Oracle閃回技術--Flashback Version QueryOracle
- 什麼是CDN?CDN的技術原理是什麼?
- vr全景技術是指什麼?什麼是vr全景技術?VR
- Oracle 閃回資料庫測試Oracle資料庫
- 學術乾貨|深入淺出解讀 Java 虛擬機器的差別測試技術Java虛擬機
- 什麼是滲透測試?與安全測試的區別是什麼?
- 【技術乾貨】盤點最流行的Web漏洞掃描工具!Web
- VoNR來了,它到底是什麼技術?
- 技術乾貨丨如何在Docker環境下搭建測試管理平臺?Docker
- IPIDEA乾貨|什麼是IP地址與DNSIdeaDNS
- IPIDEA乾貨|動態代理IP是什麼?Idea
- 乾貨!什麼是自然語言分析(NLA)
- 為什麼雲MES是企業技術的未來?
- 技術乾貨 | ToB 業務場景下自動化測試的實踐及探索
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- 軟體測試需要學習什麼技術?
- 什麼是cdn技術
- 軟體測試技術及工具
- 什麼是革命性技術eBPF?為什麼可觀測性領域都得用它eBPF
- 為什麼業務天天問技術你的技術產生什麼業務價值?可以到測試這邊為什麼天天覺得業務測試沒技術含量?
- 什麼是好的技術文件?
- 乾貨!6 款使用量最高的線上圖片壓縮工具對比評測
- 軟體測試技術乾貨丨舉個例子告訴你,未開發完成的介面該如何測試
- 技術乾貨 | NeCodeGen:基於 clang 的源到源轉譯工具
- 什麼是技術債,為什麼要還技術債?
- 技術乾貨 | WebRTC 技術解析之 Android VDMWebAndroid
- 技術美術師是做什麼的?