原理使用python連線到指定的庫,讀取要恢復表的表結構和對應的binlog日誌,在binlog 為row格式並且dml記錄所有字段值的情況下,將set 與where後字段值對換位置,拼接成的sql就是回滾sql。
安裝unzip binlog2sql-master.zip
cd binlog2sql-master/
pip install -r requirements.txt
誤操作mysql -uautomng -p'automng_123' -p3319
update sbtest7 set pad='wa ka ka ' where id=3;
update sbtest8 set pad='wa ka ka ' where id=3;
mysql> show master status\g;
*************************** 1. row ***************************
file: mysql-bin.000035
# python binlog2sql.py -h127.0.0.1 -p3319 -uautomng -p'automng_123
' -dtxdb -t sbtest7 sbtest8 --start-file='
mysql-bin.000035
' --start-datetime='
2018-08-01 15:50:00
' --stop-datetime='
2018-08-01 16:01:00
'update `txdb`.`sbtest7` set `c`='
39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134
', `k`=149507, `pad`='
wa ka ka
', `id`=3 where `c`='
39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134
' and `k`=149507 and `pad`='
90728107484-01984250703-04244069858-02683578329-82506775849
' and `id`=3 limit 1; #start 4 end 758
time
2018-08-01
16:00:12
update `txdb`.`sbtest8` set `c`='
22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460
', `k`=202756, `pad`='
wa ka ka
', `id`=3 where `c`='
22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460
' and `k`=202756 and `pad`='
54879921302-82844293345-80647833951-55849410697-97809519145
' and `id`=3 limit 1; #start 785 end 1393
time
2018-08-01
16:00:21
#start
4 end 758
time
2018-08-01
16:00:12
#start
785 end 1393
time
2018-08-01
16:00:21
# python binlog2sql.py --flashback -h127.0.0.1 -p3319 -uautomng -p'
automng_123
' -dtxdb -t sbtest7 sbtest8 --start-file='
mysql-bin.000035
' --start-position=4 --stop-position=1393
update `txdb`.`sbtest8` set `c`='
22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460
', `k`=202756, `pad`='
54879921302-82844293345-80647833951-55849410697-97809519145
', `id`=3 where `c`='
22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460
' and `k`=202756 and `pad`='
wa ka ka
' and `id`=3 limit 1; #start 785 end 1393
time
2018-08-01
16:00:21
update `txdb`.`sbtest7` set `c`='
39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134
', `k`=149507, `pad`='
90728107484-01984250703-04244069858-02683578329-82506775849
', `id`=3 where `c`='
39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134
' and `k`=149507 and `pad`='
wa ka ka
' and `id`=3 limit 1; #start 4 end 758
time
2018-08-01
16:00:12
回滾python binlog2sql.py --flashback -h127.0.0.1 -p3319 -uautomng -p'automng_123' -dtxdb -t sbtest7 sbtest8 --start-file='mysql-bin.000035' --start-position=4 --stop-position=1393 > /tmp/rollback.sql | cat
事務號一定要看清楚並寫對了,如果……如果不小心寫錯了一位數,你可以想象一下後果……
mysql -uautomng -p'automng_123' -p3319 txdb < /tmp/rollback.sql
在嘗試通過遠端的方式操作時,失敗了,不知是不支援遠端還是**遇到了問題,正在排查中……如果不能通過遠端的方式操作,那麼就需要提前在伺服器上安裝這個指令碼。
其他mysqlbinlog --no-defaults -v -v --base64-output=decode-rows --start-datetime="2021-04-09 10:55:08" --stop-datetime="2021-04-09 11:05:08" /data/mysql_33061/log_bin/bin.000002 > /tmp/bin.sql
mysql使用規範 MySQL使用規範 MySQL
bitscn.com mysql使用規範 一 核心規範 1.不用資料庫做運營,如md5 order by rand 2.控制單錶資料量 a 單錶純int不超過1000w b 單錶含char不超過500w c 單庫不超過300 400個表 3.表字段數少而精 a 影響因素 i.io高效 ii.全表遍歷...
使用binlog快取非同步化
在高併發的系統中關於快取的重要性不言而喻,快取在專案當中大量使用,扛住了大部分的查詢流量,但也有很多點需要注意,最為典型的例子就是資料一致性問題,快取擊穿問題,快取高可用問題等等。這次需要解決的問題是乙個秒殺場景的高併發問題。快取一致性就是說db的資料與快取的資料保持一致,理論上同一瞬間去變更兩個值...
mysql linux下使用yum安裝mysql
linux下使用yum安裝mysql 1 安裝 檢視有沒有安裝過 yum list installed mysql rpm qa grep mysql 檢視有沒有安裝包 yum list mysql 安裝mysql客戶端 yum install mysql 安裝mysql 伺服器端 yum inst...