亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL誤操作后快速恢復數據的方法

2024-07-24 13:11:31
字體:
來源:轉載
供稿:網友

摘要: 利用binlog閃回誤操作數據。
基本上每個跟數據庫打交道的程序員(當然也可能是你同事)都會碰一個問題,MySQL誤操作后如何快速回滾?比如,delete一張表,忘加限制條件,整張表沒了。假如這還是線上環境核心業務數據,那這事就鬧大了。誤操作后,能快速回滾數據是非常重要的。

傳統解法

用全量備份重搭實例,再利用增量binlog備份,恢復到誤操作之前的狀態。然后跳過誤操作的SQL,再繼續應用binlog。此法費時費力,不值得再推薦。

利用binlog2sql快速閃回

首先,確認你的MySQL server開啟了binlog,設置了以下參數:

[mysqld]server-id = 1log_bin = /var/log/mysql/mysql-bin.logmax_binlog_size = 100Mbinlog-format = row

如果沒有開啟binlog,也沒有預先生成回滾SQL,那真的無法快速回滾了。對存放重要業務數據的MySQL,強烈建議開啟binlog。

隨后,安裝開源工具binlog2sql。binlog2sql是一款簡單易用的binlog解析工具,其中一個功能就是生成回滾SQL。

shell> git clone https://github.com/danfengcao/binlog2sql.gitshell> pip install -r requirements.txt

然后,我們就可以生成回滾SQL了。

背景:小明在20點多時誤刪了test庫tbl表整張表的數據,需要緊急回滾。

test庫tbl表原有數據mysql> select * from tbl;+----+--------+---------------------+| id | name  | addtime       |+----+--------+---------------------+| 1 | 小趙  | 2016-12-10 00:04:33 || 2 | 小錢  | 2016-12-10 00:04:48 || 3 | 小孫  | 2016-12-13 20:25:00 || 4 | 小李  | 2016-12-12 00:00:00 |+----+--------+---------------------+4 rows in set (0.00 sec)mysql> delete from tbl;Query OK, 4 rows affected (0.00 sec)20:28時,tbl表誤操作被清空mysql> select * from tbl;Empty set (0.00 sec)

恢復數據步驟:

1、登錄mysql,查看目前的binlog文件

mysql> show master status;+------------------+-----------+| Log_name     | File_size |+------------------+-----------+| mysql-bin.000051 |    967 || mysql-bin.000052 |    965 |+------------------+-----------+

2、最新的binlog文件是mysql-bin.000052,我們再定位誤操作SQL的binlog位置。誤操作人只能知道大致的誤操作時間,我們根據大致時間過濾數據。

shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-datetime='2016-12-13 20:25:00' --stop-datetime='2016-12-13 20:30:00'輸出:INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:25:00', 3, '小孫'); #start 4 end 290 time 2016-12-13 20:25:46INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:26:00', 4, '小李'); #start 317 end 487 time 2016-12-13 20:26:26UPDATE `test`.`tbl` SET `addtime`='2016-12-12 00:00:00', `id`=4, `name`='小李' WHERE `addtime`='2016-12-13 20:26:00' AND `id`=4 AND `name`='小李' LIMIT 1; #start 514 end 701 time 2016-12-13 20:27:07DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:33' AND `id`=1 AND `name`='小趙' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:48' AND `id`=2 AND `name`='小錢' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-13 20:25:00' AND `id`=3 AND `name`='小孫' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-12 00:00:00' AND `id`=4 AND `name`='小李' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05

3、我們得到了誤操作sql的準確位置在728-938之間,再根據位置進一步過濾,使用flashback模式生成回滾sql,檢查回滾sql是否正確

shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=3556 -B輸出:INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-12 00:00:00', 4, '小李'); #start 728 end 938 time 2016-12-13 20:28:05INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:25:00', 3, '小孫'); #start 728 end 938 time 2016-12-13 20:28:05INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48', 2, '小錢'); #start 728 end 938 time 2016-12-13 20:28:05INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:33', 1, '小趙'); #start 728 end 938 time 2016-12-13 20:28:05

確認回滾sql正確,執行回滾語句。登錄mysql確認,數據回滾成功。

shell> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-pos=3346 --end-pos=3556 -B | mysql -h127.0.0.1 -P3306 -uadmin -p'admin'mysql> select * from tbl;+----+--------+---------------------+| id | name  | addtime       |+----+--------+---------------------+| 1 | 小趙  | 2016-12-10 00:04:33 || 2 | 小錢  | 2016-12-10 00:04:48 || 3 | 小孫  | 2016-12-13 20:25:00 || 4 | 小李  | 2016-12-12 00:00:00 |+----+--------+---------------------+

至此,不用再擔心被炒魷魚了。

常見問題

有人會問,我DDL誤操作了怎么快速回滾?比如drop了一張大表。

很難做到。因為即使在在row模式下,DDL操作也不會把每行數據的變化記錄到binlog,所以DDL無法通過binlog回滾。實現DDL回滾,必須要在執行DDL前先備份老數據。確實有人通過修改mysql server源碼實現了DDL的快速回滾,我找到阿里的xiaobin lin提交了一個patch。但據我所知,國內很少有互聯網公司應用了這個特性。原因的話,我認為最主要還是懶的去折騰,沒必要搞這個低頻功能,次要原因是會增加一些額外存儲。

所以,DDL誤操作的話一般只能通過備份來恢復。如果公司連備份也不能用了,那真的建議去買張飛機票了。干啥?跑唄

mysql除了binlog2sql,是否還有其他回滾工具?

當然有。阿里彭立勛對mysqlbinlog增加了flashback的特性,這應該是mysql最早有的flashback功能,彭解決的是DML的回滾,并說明了利用binlog進行DML閃回的設計思路。DDL回滾特性也是由阿里團隊提出并實現的。這兩個功能是有創新精神的,此后出現的閃回工具基本都是對上面兩者的模仿。另外,去哪兒開源的Inception是一套MySQL自動化運維工具,這個就比較重了,支持DML回滾,還不是從binlog回滾的,是從備份回滾的,也支持DDL回滾表結構,數據是回滾不了滴~ 還有一種做法叫slave延時備份,搞臺不加業務流量的slave,故意延遲一段時間,這其實是在傳統辦法的基礎上去除了實例恢復這步。此法會額外消耗一臺機器,我們不推薦這么做。

如有mysql回滾相關的優秀工具優秀文章遺漏,煩請告知。

我的郵箱 danfengcao.info@gmail.com

參考資料

[1] 彭立勛, MySQL下實現閃回的設計思路

[2] Lixun Peng, Provide the flashback feature by binlog

[3] 丁奇, MySQL閃回方案討論及實現

[4] xiaobin lin, flashback from binlog for MySQL

[5] 王竹峰, 去哪兒inception

[6] danfengcao, binlog2sql: Parse MySQL binlog to SQL you want

 

注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人中文字幕在线观看| 狠狠色狠狠色综合日日小说| 亚洲第一综合天堂另类专| 久久精品国产久精国产思思| 91九色蝌蚪国产| 91精品国产乱码久久久久久蜜臀| 精品国产乱码久久久久久天美| 中文字幕亚洲综合久久| 欧美三级xxx| 国产精品视频久久| 久久99久国产精品黄毛片入口| 在线播放日韩专区| 亚洲亚裔videos黑人hd| 亚洲国产一区自拍| 精品久久久久久久久久ntr影视| 欧美成人小视频| 欧洲亚洲免费视频| 亚洲男子天堂网| 亚洲欧美www| 久久久久国色av免费观看性色| 欧洲午夜精品久久久| 大桥未久av一区二区三区| 日韩精品免费电影| 8x拔播拔播x8国产精品| 国产成人精品电影| 国产成人精品免高潮在线观看| 日韩久久精品电影| 久久全国免费视频| 成人国产精品久久久久久亚洲| 亚洲男人天堂网站| 日韩免费在线看| 亚洲欧美综合v| 国a精品视频大全| 美女精品久久久| 在线日韩日本国产亚洲| 91久久精品美女高潮| 日韩精品久久久久| 久久久爽爽爽美女图片| 中文字幕欧美在线| 日韩精品在线观看一区二区| 日韩欧美在线第一页| 国产精品视频999| 亚洲第一精品夜夜躁人人爽| 国产精品久久999| 国产视频亚洲精品| 国产欧美精品在线播放| 国产成人在线视频| 日韩av一区二区在线| 国产99久久精品一区二区 夜夜躁日日躁| 国产97免费视| 欧美性猛交99久久久久99按摩| 欧美日韩在线视频一区| 欧美日韩成人在线观看| 欧美成人免费视频| 91大神在线播放精品| 久久国产精品久久久久久| 57pao国产成人免费| 欧美在线视频网站| 欧美视频中文在线看| 国产丝袜一区视频在线观看| 96pao国产成视频永久免费| 九九久久国产精品| 日本最新高清不卡中文字幕| 精品激情国产视频| 中文字幕免费精品一区高清| 91久久精品国产91性色| 国产精品久久久久久久久久ktv| 精品成人国产在线观看男人呻吟| 亚州精品天堂中文字幕| 久久人体大胆视频| 国模精品视频一区二区| 26uuu另类亚洲欧美日本老年| 伊人久久免费视频| 美女视频久久黄| 亚洲综合小说区| 国产精品亚洲美女av网站| 久久成人18免费网站| 91精品在线影院| 国产综合色香蕉精品| 欧美www视频在线观看| 亚洲精美色品网站| 亚洲tv在线观看| 国产精品视频大全| 中文字幕亚洲一区在线观看| 日韩中文字幕在线看| 欧美国产视频一区二区| 欧美久久精品一级黑人c片| 91夜夜揉人人捏人人添红杏| 亚洲精品中文字幕女同| 亚洲欧美在线x视频| 亚洲一区二区三区sesese| 国产精品成人v| 国产精品久久中文| 日韩欧美一区二区在线| 国产成人精品久久| 日韩中文字幕在线免费观看| 国产精品久久久久久久久粉嫩av| 一区二区三欧美| 亚洲视频一区二区三区| 日韩电视剧免费观看网站| 久久久久久久久久久国产| 欧美国产日韩免费| 国产亚洲精品一区二555| 97精品欧美一区二区三区| 在线日韩日本国产亚洲| 国产亚洲欧美另类中文| 亚洲国产精品成人精品| 亚洲国产高清高潮精品美女| 亚洲第一免费网站| 亚洲精品自在久久| 国产精品视频免费观看www| 亚洲欧洲视频在线| 国产精品爽黄69天堂a| 1769国内精品视频在线播放| 日韩av网站在线| 国产精品美女无圣光视频| 成人xxxx视频| 日韩免费在线播放| 亚洲精品乱码久久久久久按摩观| 午夜精品一区二区三区视频免费看| 欧美日韩中国免费专区在线看| 国产成人精品免费视频| 91精品在线看| 精品日本美女福利在线观看| 国产日韩在线视频| 中文字幕国产精品| 国产精品美女久久久久av超清| 亚洲欧美成人一区二区在线电影| 欧美性videos高清精品| www.欧美精品一二三区| 国产欧美一区二区| 久久精品国产视频| 国产亚洲精品va在线观看| 8x拔播拔播x8国产精品| 欧美日韩激情小视频| 成人激情在线播放| 国产91色在线免费| 91香蕉国产在线观看| 色多多国产成人永久免费网站| 久久精品国产亚洲精品2020| 久久精品中文字幕| 日韩av在线网站| 欧美在线xxx| 欧美第一黄网免费网站| 国产视频精品一区二区三区| 亚洲视频自拍偷拍| 国产精自产拍久久久久久| 亚洲国产日韩欧美在线99| 久久精品视频中文字幕| 精品欧美国产一区二区三区| 欧美黄色www| 欧美在线www| 久久久久久久999| 91理论片午午论夜理片久久| 久久中文字幕视频| 日韩国产精品视频| 久久精品中文字幕免费mv| 久久午夜a级毛片| 久久精品人人爽| 精品美女永久免费视频| 欧美人交a欧美精品| 亚洲欧美自拍一区| 亚洲欧美国产精品va在线观看| 中文字幕亚洲第一|