精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MyFlash--美團點評的開源MySQL閃回工具

數據庫 MySQL
由于運維、DBA的誤操作或是業務bug,我們在操作中時不時會出現誤刪除數據情況。早期要想恢復數據,只能讓業務人員根據線上操作日志,構造誤刪除的數據,或者DBA使用binlog和備份的方式恢復數據,不管哪種,都非常費時費力,而且容易出錯。直到彭立勛首次在MySQL社區為mysqlbinlog擴展了閃回功能。

[[210534]]

由于運維、DBA的誤操作或是業務bug,我們在操作中時不時會出現誤刪除數據情況。早期要想恢復數據,只能讓業務人員根據線上操作日志,構造誤刪除的數據,或者DBA使用binlog和備份的方式恢復數據,不管那種,都非常費時費力,而且容易出錯。直到彭立勛***在MySQL社區為mysqlbinlog擴展了閃回功能。

在美團點評,我們也遇到過研發人員誤刪主站的配置信息,從而導致主站長達2個小時不可用的情況。DBA同學當時使用了技術團隊自研的binlog2sql完成了數據恢復,并多次挽救了線上誤刪數據導致的嚴重故障。不過,binlog2sql在恢復速度上不盡如人意,因此我們開發了一個新的工具——MyFlash,它很好地解決了上述痛點,能夠方便并且高效地進行數據恢復。

現在該工具正式開源,開源地址為:https://github.com/Meituan-Dianping/MyFlash

閃回工具現狀

先來看下目前市面上已有的恢復工具,我們從實現角度把它們劃分成如下幾類。

mysqlbinlog工具配合sed、awk。該方式先將binlog解析成類SQL的文本,然后使用sed、awk把類SQL文本轉換成真正的SQL。

  •     優點:當SQL中字段類型比較簡單時,可以快速生成需要的SQL,且編程門檻也比較低。
  •     缺點:當SQL中字段類型比較復雜時,尤其是字段中的文本包含HTML代碼,用awk、sed等工具時,就需要考慮極其復雜的轉義等情況,出錯概率很大。

給數據庫源碼打patch。該方式擴展了mysqlbinlog的功能,增加Flashback選項。

  •     優點:復用了MySQL Server層中binlog解析等代碼,一旦穩定之后,無須關心復雜的字段類型,且效率較高。
  •     缺點:在修改前,需要對MySQL的復制代碼結構和細節需要較深的了解。版本比較敏感,在MySQL 5.6上做的patch,基本不能用于MySQL 5.7的回滾操作。升級困難,因為patch的代碼是分布在MySQL的各個文件和函數中,一旦MySQL代碼改變,特別是復制層的重構,升級的難度不亞于完全重新寫一個。

使用業界提供的解析binlog的庫,然后進行SQL構造,其優秀代表是binlog2sql。

  •     優點:使用業界成熟的庫,因此穩定性較好,且上手難度較低。
  •     缺點:效率往往較低,且實現上受制于binlog庫提供的功能。

上述幾種實現方式,主要是提供的過濾選項較少,比如不能提供基于SQL類型的過濾,需要回滾一個delete語句,導致在回滾時,需要結合awk、sed等工具進行篩選。

總結了上述幾種工具的優缺點,我認為理想的閃回工具需要有以下特性。

a. 無需把binlog解析成文本,再進行轉換。

b. 提供原生的基于庫、表、SQL類型、位置、時間等多種過濾方式。

c. 支持MySQL多個版本。

d. 對于數據庫的代碼重構不敏感,利于升級。

e. 自主掌控binlog解析,提供盡可能靈活的方式。

在這些特性中,binlog的解析是一切工作的基礎。接下來我會介紹binlog的基本結構。

binlog格式初探

binlog格式概覽

一個完整的binlog文件是由一個format description event開頭,一個rotate event結尾,中間由多個其他event組合而成。

 

binlog文件實例:

 

每個event都是由event header 和event data組成。下面簡單介紹下幾種常見的binlog event。

① formart description event

 

表達的含義是:

170905  01:59:33 server id 10  end_log_pos 123 CRC32 0xed1ec563 

Start: binlog v 4, server v 5.7.18-log created 170905  01:59:33

② table map event

 

表達的含義是:

    170905  01:59:33 server id 10  end_log_pos 339 CRC32 0x3de40c0d     

    Table_map: `test`.`test4` mapped to number 238

③ update row event

 

表達的含義是:

    170905  01:59:33 server id 10  end_log_pos 385 CRC32 0x179ef6dd     

    Update_rows: table id 238 flags: STMT_END_F 

    UPDATE `test`.`test4` WHERE @1=3 SET @1=13;

binlog event回滾

根據上面的binlog介紹,可以看到每個binlog event中event header有個type_code,其中insert為30,update為31,delete為32。對于insert和delete兩個相反的操作,只需把type_code互換,則在binlog event級別完成回滾。

 

而對于update操作,其格式如下。

 

其中,BI是指before image,AI是指after image。

我們只需依次遍歷修改前的數據和修改后的數據,并一一互換即可。因此整個回滾操作的難點在于回滾update語句,而update語句回滾的核心在于計算出每個AI、BI的長度。下面介紹下長度以及部分字段的計算方法。

鏡像長度計算

鏡像是由一個個字段組成的,根據字段類型的不同,其計算長度的方法也不一樣。

  • 只與字段類型相關。比如int占用4個字節,bingint占用8個字節。其中類型信息可以從table map event中獲取。
  • 與字段類型及其參數相關。比如decimal(18,9),占用9個字節,參數信息在table map event中。
  • 與字段類型、參數以及實際存儲的值相關。比如varchar(10),有1個字節表示長度,之后的字節才表示真正的數據。比如varchar(280),有2個字節表示長度。實際的長度和數據在一起。

解析binlog中的若干個關鍵點

① length encoded integer

binlog中一個或者多個字節組合,分別表示了不同的含義。比如,timestamp是由固定的4個字節組成,event類型由一個字節表示;數據庫名和表名最長為64個字符,即使每個字符占用3個字節,那么占用的字節數為192<255。因此最多使用一個字節,就可以完成實際長度表示。

然而列的實際數量,可能需要超過1個字節、2個字節、3個字節甚至8個字節去表示。如果我們使用***的8個字節去表示,那么在絕大多數情況下都是浪費存儲空間的。針對這種情況,length encoded integer應運而生。

 

比如在獲取一個varchar類型的長度時,首先讀取***個字節,如果值小于251,那么varchar的長度就是***個字節表示的長度。如果***個字節的值為0xFC,那么varchar的長度是由該字節之后的后兩個字節組成,以此類推。

② decimal類型

decimal是由整數部分和小數部分組成。無論是整數還是小數,每9個數字,需要4個字節。如果不是9的倍數,剩余的小數位,需要的字節數如下,為方便描述,將該關系定義為函數Fnum。

 

舉例,對于 decimal(18,10):

  • 整數部分可展示的為8,用int,即4個字節。
  • 小數部分,需要的字節數為 (10 /9)*4+Fnum(10%9)=5。
  • 那么總共加起來需要4+5=9個字節。

閃回工具架構

在上面的章節中,介紹了單個binlog event的反轉方法。在實踐中,我們往往需要把某個binlog,按照指定的條件,過濾出需要的binlog,并進行反轉。那么MyFlash是如何完成這些目標的呢?

解析binlog

首先把binlog文件,解析成多個event,放入到相關隊列中。在實現上,為了盡可能加快解析速度,可以讓用戶指定解析的開始與結束位置。把binlog文件解析成binlog event后,再判斷下是否符合指定的時間條件,若不符合,則丟棄該event。

 

注意:用戶可以不指定位置和時間,則解析整個文件。如果只指定時間,那么也需要從文件開始處解析,取出時間信息,再進行判斷。因此,當需要回滾的binlog只占整個binlog的一小部分時,推薦使用指定位置。

 

重組event

把binlog event組成最小執行單元。在常見的binlog event中table_map event包含了所要了表名、庫名等元數據信息,而row_event(包含write_event、delete_event、update_event)包含了真正的數據。因此在設計中使用了一個最小執行單元概念。所謂的最小執行單元,即least execution event unit,通常包含一個table_map event和若干個row_event。

 

比如在binlog格式概覽一節中,介紹了table_map_event和update_row_event。如果只有update_row_event,那么我們無法知道這個event對應的行記錄變更對應的表。因此一個完整的最小執行單元最少包含一個table_map_event和write_row_event、update_row_even、delete_row_event中的一個。

為什么我們需要使用最小執行單元?因為我們在閃回操作時,不能簡單的把每個event反轉之后,然后再將所有event的順序反轉過來。如果這樣的話,就會出現table_map event在row event之后,這顯然是違反binlog執行邏輯的。

有了最小執行單元之后,只需兩步,即可完成反轉。

a. 反轉最小執行單元中的row event。

b. 逆序最小執行單元隊列,即可。

當然在反轉前,也可以增加過濾操作。比如過濾庫名、表名和SQL類型等。

 

生成binlog文件

有了逆序的最小執行單元隊列后,只需把每個最小執行單元依次輸入到文件即可。不過不要忘了修改每個binlog event里的next_position,用來表示下一個binlog的位置。

性能對比

測試場景

使用testFlashback2,插入100萬條數據:

  1. CREATE TABLE `testFlashback2` ( 
  2.   `id` int(11) NOT NULL AUTO_INCREMENT, 
  3.   `nameShort` varchar(20) DEFAULT NULL
  4.   `nameLong` varchar(260) DEFAULT NULL
  5.   `amount` decimal(19,9) DEFAULT NULL
  6.   `amountFloat` float DEFAULT NULL
  7.   `amountDouble` double DEFAULT NULL
  8.   `createDatetime6` datetime(6) DEFAULT NULL
  9.   `createDatetime` datetime DEFAULT NULL
  10.   `createTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  11.   `nameText` text, 
  12.   `nameBlob` blob, 
  13.   `nameMedium` mediumtext, 
  14.   PRIMARY KEY (`id`) 
  15. ) ENGINE=InnoDB 
  16.  
  17. mysql> select count(*) from testFlashback2; 
  18. +----------+ 
  19. count(*) | 
  20. +----------+ 
  21. |  1048576 | 
  22. +----------+ 
  23. 1 row in set (0.16 sec) 
  24.  
  25. delete from testFlashback2; 

測試結果

 

 

 

從上述圖表中可以看出,MyFlash的速度最快。

責任編輯:龐桂玉 來源: 36大數據
相關推薦

2017-02-20 19:23:13

2019-08-23 13:10:39

美團點評Kubernetes集群管理

2018-03-09 10:06:03

開源小程序前端

2018-10-19 14:16:09

Flink數據倉庫數據系統

2018-07-17 14:25:02

SQL解析美團點評MySQL

2017-08-01 09:37:00

深度學習美團機器學習

2015-10-08 10:09:16

2017-07-03 15:32:49

數據庫MySQL架構

2017-03-24 14:29:23

互聯網

2015-11-03 11:03:08

騰訊美團

2017-12-29 08:54:58

高可用數據庫架構

2022-02-14 16:08:15

開源項目線程池動態可監控

2015-10-08 10:01:27

2018-04-04 09:30:23

美團點評響應式架構

2013-08-20 13:11:58

技術美團

2015-11-03 16:23:24

美團點評騰訊資本

2025-11-06 09:03:00

2019-10-11 09:55:53

數據工具架構

2018-10-29 08:49:26

IBM Linux紅帽

2022-03-03 16:45:02

美團述職反饋
點贊
收藏

51CTO技術棧公眾號

久久人人88| 国产美女精品写真福利视频| 天堂在线一区二区| 日韩色av导航| 美女扒开腿免费视频| aa视频在线观看| 中文字幕乱码日本亚洲一区二区| 成人免费看吃奶视频网站| 免费一级a毛片夜夜看| 欧洲在线一区| 欧美精品久久天天躁| 亚洲 欧美 综合 另类 中字| 国产精品免费观看| 成人亚洲精品久久久久软件| 国产精品va在线播放| 久久久久亚洲av无码专区 | 国产嫩草一区二区三区在线观看| 色av性av丰满av| 亚洲最新av| 亚洲色图美腿丝袜| 亚洲精品乱码久久久久久蜜桃图片| 日韩精品麻豆| 精品久久久免费| 中文字幕精品在线播放| 狠狠狠综合7777久夜色撩人| 成人午夜激情在线| 成人美女免费网站视频| 91丨九色丨海角社区| 亚洲精品婷婷| 欧美激情aaaa| 糖心vlog免费在线观看| 国产剧情在线观看一区| 亚洲国产天堂久久综合网| 欧美国产在线一区| 日韩电影精品| 色婷婷一区二区| 欧美a在线视频| av老司机在线观看| 亚洲激情五月婷婷| 免费观看黄色的网站| eeuss影院www在线播放| 久久精品无码一区二区三区| 你懂的视频在线一区二区| 动漫av一区二区三区| 久久99精品久久久久久动态图| 日韩av电影国产| 色av性av丰满av| 香蕉成人久久| 国产成+人+综合+亚洲欧美丁香花| 亚洲国产综合久久| 亚洲伦理精品| 国模私拍一区二区三区| 精品在线免费观看视频| 最新国产精品久久久| 九色精品免费永久在线| 欧美日韩中文字幕在线观看| 欧美在线三区| 国模精品视频一区二区| 亚洲黄色小说图片| 久久人人97超碰国产公开结果| 欧美福利在线观看| 日本熟伦人妇xxxx| 99在线|亚洲一区二区| 国产69久久精品成人看| 中文字幕xxxx| 久久99久久99精品免视看婷婷| 成人午夜一级二级三级| 精品国产乱码一区二区三| 国产成人精品三级| 好吊色欧美一区二区三区视频| 天堂v在线观看| 久久久久久久一区| 爱爱爱视频网站| 日本成人不卡| 欧美性生交xxxxx久久久| 精品少妇无遮挡毛片| 色8久久久久| 精品欧美乱码久久久久久1区2区| 国模私拍在线观看| 精品久久久久中文字幕小说| 波霸ol色综合久久| 99久久久免费精品| 国产亚洲永久域名| 国产在线视频欧美| 日韩一级在线播放| 欧美国产精品一区二区| 久久久久久久久影视| 自拍在线观看| 欧美午夜宅男影院| 亚洲少妇一区二区三区| 亚洲伊人伊成久久人综合网| 欧美精品一区二区三区四区| 精品人妻一区二区免费| 欧美理论电影大全| 久久免费视频网站| 中文字幕第99页| www.欧美精品一二区| 亚洲精品中字| 1024在线看片你懂得| 欧美性猛片aaaaaaa做受| 中文字幕乱妇无码av在线| 你懂的视频欧美| 欧美日本国产在线| 男人天堂视频网| 不卡的看片网站| 一区二区三视频| 天堂√中文最新版在线| 欧美一级免费观看| 久久婷婷五月综合| 伊人久久久大香线蕉综合直播| 国产精品久久久久999| 蜜臀av在线观看| 亚洲色图欧洲色图| 男人的天堂日韩| 久久综合五月婷婷| 欧美乱人伦中文字幕在线| 特级西西444www大胆免费看| 波多野结衣亚洲一区| 正在播放国产精品| 久久99久久99精品免观看软件| 日韩一区二区免费电影| 91导航在线观看| 久久精品亚洲| 久久综合福利| zzzwww在线看片免费| 欧美一级午夜免费电影| 岛国片在线免费观看| 玖玖视频精品| 欧美精品一区二区三区久久| 超碰在线最新网址| 日韩欧美视频在线| 欧美激情图片小说| 国产综合色视频| 一本一道久久久a久久久精品91| 亚洲天堂资源| 亚洲娇小xxxx欧美娇小| 国产午夜精品一区二区理论影院 | 欧美午夜片在线免费观看| 国产吃瓜黑料一区二区| 欧美伊人久久| 97超碰人人看人人| 18+视频在线观看| 欧美一个色资源| 欧美国产日韩在线观看成人| 精品夜夜嗨av一区二区三区| 一级做a爰片久久| 欧美亚洲黄色| 久久综合免费视频影院| 国产毛片在线视频| 有码一区二区三区| 97中文字幕在线观看| 尤物在线精品| 精品一区久久| www.com.cn成人| 国产亚洲在线播放| 中文字幕乱码一区二区| 日韩码欧中文字| 女人扒开腿免费视频app| 欧美精品入口| 国产尤物91| 爱情电影社保片一区| 亚洲人成人99网站| 中国一区二区视频| 最新国产成人在线观看| 老女人性生活视频| 国产视频亚洲| 视频一区视频二区视频三区视频四区国产| 88xx成人网| 欧美成人精品一区二区| 秋霞av鲁丝片一区二区| 欧美性猛交xxxx乱大交3| 亚洲码无人客一区二区三区| 美女视频黄 久久| 日韩人妻一区二区三区蜜桃视频| 一区二区日韩| 国产精品a久久久久久| 香蕉视频网站在线观看| 日韩免费看网站| 国产一级做a爱片久久毛片a| 国产亚洲综合性久久久影院| 国产一区二区在线观看免费视频| 欧美性色综合| 日韩欧美手机在线| 欧美日韩中出| 国产999在线| 最新超碰在线| 亚洲跨种族黑人xxx| 91国产精品一区| 香蕉加勒比综合久久| 日韩毛片无码永久免费看| 精品一区二区三区久久| 青青草国产精品视频| 成人影院在线| 国产日韩一区二区三区| 成人午夜一级| 97视频在线观看播放| 成人影视在线播放| 欧美精品一区二区久久婷婷| 亚洲高清在线看| 亚洲五码中文字幕| 国内毛片毛片毛片毛片毛片| 99久久久国产精品| 性色av浪潮av| 日韩av中文字幕一区二区| 黄色网在线视频| 成人在线免费观看网站| 国产乱码精品一区二区三区卡| 成人四虎影院| 日本一区二区不卡| wwww亚洲| 久久视频精品在线| 成年午夜在线| 精品亚洲一区二区三区四区五区| 国产丝袜在线视频| 欧美偷拍一区二区| 日韩精品一区二区亚洲av| 夜夜揉揉日日人人青青一国产精品| 美女爆乳18禁www久久久久久| 国产成人免费视| 最新av免费在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 蜜臀av性久久久久蜜臀av| 久久精品国产大片免费观看| 精品国产免费一区二区三区 | 欧美一区二区国产| 做爰视频毛片视频| 色综合久久久久| 圆产精品久久久久久久久久久| 亚洲精品一卡二卡| 中文字幕91爱爱| 亚洲v中文字幕| 亚洲最大的黄色网址| 国产日韩v精品一区二区| 久久人人妻人人人人妻性色av| 国产剧情av麻豆香蕉精品| 中文字幕一区二区三区四区在线视频| 亚洲一区亚洲| 妺妺窝人体色www在线小说| 国产情侣一区| 青青青免费在线| 亚洲日本视频| 好吊妞无缓冲视频观看| 99人久久精品视频最新地址| 免费一级特黄毛片| 日韩一区二区久久| 欧美色图色综合| 亚洲欧美日韩精品一区二区| 国产中文字幕二区| 亚洲女人av| 蜜臀av午夜一区二区三区 | 国产免费毛卡片| 宅男噜噜噜66国产日韩在线观看| 成人性生活视频免费看| 亚洲人人精品| 国产裸体舞一区二区三区| 久久黄色网页| 国产一二三区av| 国模无码大尺度一区二区三区| 欧美成人手机在线视频| 国产一区二区三区在线观看免费视频 | 美洲天堂一区二卡三卡四卡视频| 中文字幕网av| 国内久久精品视频| 欧洲熟妇的性久久久久久| 91视频国产观看| 亚洲做受高潮无遮挡| 日本一区二区免费在线| 国精产品久拍自产在线网站| 一区二区三区毛片| 成人午夜视频精品一区| 在线观看免费视频综合| 一级片视频网站| 精品国产伦一区二区三区观看方式 | 成人精品在线| 成人动漫在线视频| 偷拍一区二区| 亚洲高清视频在线观看| 欧美精品黄色| 欧美日韩在线中文| 精品一区二区三区免费视频| 成人做爰69片免费| 久久久精品国产免费观看同学| 亚洲色图 激情小说| 亚洲一二三区在线观看| 波多野结衣日韩| 日韩一区二区三区在线| 可以免费看污视频的网站在线| 日日噜噜噜夜夜爽亚洲精品| xxxcom在线观看| 国产在线观看一区二区三区 | 国产中文字幕精品| 欧美丰满少妇人妻精品| 国产精品乱码妇女bbbb| 日本一级一片免费视频| 欧美日韩在线精品一区二区三区激情 | 免费看欧美美女黄的网站| 中文字幕 欧美 日韩| 国产日产欧美一区| 日本少妇在线观看| 欧美精品三级在线观看| 手机福利小视频在线播放| 久久伊人精品视频| 巨胸喷奶水www久久久免费动漫| 国产69精品久久久久9999apgf| 精品免费av| 欧美 丝袜 自拍 制服 另类| 久久99精品国产.久久久久 | 国产精品一在线观看| 日韩精品一区二区在线视频| 青青草97国产精品免费观看 | 亚洲精品亚洲人成人网| 无码人妻丰满熟妇区五十路| 欧美大黄免费观看| 黄网站在线播放| 国产精品久久久一区| 台湾亚洲精品一区二区tv| 中国丰满熟妇xxxx性| 激情六月婷婷久久| 快灬快灬一下爽蜜桃在线观看| 亚洲成人动漫精品| www.色日本| 久久大大胆人体| 国产美女久久| 日本不卡在线观看| 另类天堂av| 亚洲精品理论片| 欧美日韩视频免费播放| 丰满少妇一级片| 欧美夫妻性生活xx| 中文一区二区三区四区| 国产女主播av| 国产乱码精品1区2区3区| 911国产在线| 欧美日韩精品电影| 中文字幕在线视频区| 国产精品视频大全| 日韩av有码| 亚洲精品久久久久久宅男| 国产精品入口麻豆九色| 在线视频精品免费| 这里只有精品在线播放| 国产精品亚洲d| 五月天亚洲综合小说网| 日本视频一区二区| 91动漫免费网站| 911国产精品| 欧美人与性动交α欧美精品图片| 亚洲一区二区日本| 欧美日韩1区2区3区| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 视频在线这里都是精品| 亚洲影院污污.| 一区二区亚洲| 中文在线一区二区三区| 欧美日韩国产区| 国产网站在线播放| 成人精品aaaa网站| 国内精品久久久久久久97牛牛| 久久国产免费视频| 精品日韩视频在线观看| av网在线观看| 96精品久久久久中文字幕| 午夜精品免费| 人妻少妇精品视频一区二区三区| 狠狠躁夜夜躁人人爽超碰91| 极品白浆推特女神在线观看| 国产免费观看久久黄| 欧美福利在线| 久久精品女同亚洲女同13| 欧美性色xo影院| 久草资源在线| 国产偷久久久精品专区| 久久国产一二区| 国产精品嫩草影院俄罗斯| 精品国产乱子伦一区| 丝袜美腿一区| 精品久久久无码人妻字幂| 99精品视频在线观看| 136福利视频导航| 久久久免费观看| 欧美伦理在线视频| jjzz黄色片| 在线亚洲一区二区| 日本片在线看| 欧美一级二级三级九九九| 精品一区二区三区影院在线午夜| 日本一二三区视频| 日韩在线欧美在线国产在线| 成人春色在线观看免费网站| 别急慢慢来1978如如2| 亚洲综合清纯丝袜自拍| 国模精品一区二区| 国产福利久久精品| 蜜桃视频一区二区三区在线观看 | av电影免费在线观看| 久久久久久九九九九| 国产一区视频网站| 一级一片免费看| 欧美大片在线看| 久久在线视频免费观看|