iDB是如何運轉的 一

2022-03-01 21:56:07 字數 2278 閱讀 6347

鄭昀 建立於2015/12/2 最後更新於2015/12/4

提綱:普通dba和文藝dba怎麼做sql審核

預執行庫如何實操

inception對備份/回滾伺服器的特殊處理

大家都做這件事,一定是因為當資料量大到一定程度,資料重要到一定程度時,online schema change 和刷庫不容有失,第一解決鎖表問題,不能影響線上業務,第二搞定操作回滾問題,第三解救 dba 於倒懸。我們的實現請參考《#研發解決方案#idb-資料庫自動化運維平台》。

無論是 ddl 操作,還是資料訂正(也被稱為 dml 操作),都涉及 sql 審核、預執行和資料備份及回滾。

1,普通 dba 青年的做法是:

dev 或 cm 給 dba 發執行指令碼,

dba 肉眼審核,

駁回,修改,審核,再駁回,……,通過,

dba 執行前做一次全表備份,

執行,dev 或 qa 檢查,

收兵,或許有問題,則備份還原。

2,稍微文藝一些的 dba 青年的做法是:

dev 或 cm 登入自動化運維系統,提交 sql 指令碼,

sql 審核元件對指令碼自動審核,檢查語法,檢查規範,

dba 點選預執行,指令碼在測試資料庫上 explain 或直接執行,獲得第一手資料,

dba 確認無誤後,審核通過,系統按時在生產庫上執行,執行前系統將生產庫資料備份。

或者援引 inception 文件裡的這張圖示意:

圖1 inception的架構

下面展示一下預執行時審核詳情頁上點選」生成執行明細「按鈕的效果:

我們可以在這裡選一下「執行方式」,共有三種可選:

inception 在做 dml 操作時,會將所有當前語句修改的行備份下來,儲存到乙個指定的庫中。qunar 在這裡有一些特殊設計,值得借鑑。

下面文字搬運自他們的文件:

備份資料在備份機器的儲存,是與線上被修改庫一對一的。但因為機器多(線上機器有很多)對一(備份機器只有一台),所以為了防止庫名的衝突,備份機器的庫名組成是由線上機器的 ip 位址的點換成下劃線,再加上埠號,再加上庫名三部分,這三部分也是通過下劃線連線起來的。例如:

192_168_1_1_3310_inceptiondb

乙個備份庫,裡面的表與對應線上表都是一一對應的,也就是說線上庫 inceptiondb 中有什麼表,在備份庫 192_168_1_1_3310_inceptiondb 中就有什麼表,表名也完全相同,不同的只是表中的列不同而已,它是用來儲存所有對這個表修改的回滾語句的,對應的表包括的列主要有下面兩個:

rollback_statement text:這個列儲存的是針對當前這個表的某一行被修改後,生成的這行修改的回滾語句。因為 binlog 是 row 模式的,所以不管是什麼語句,產生的回滾語句都是針對一行的,同時有可能一條語句的修改影響了多行,那麼這裡就會有多個回滾語句,但對應的是同乙個 sql 語句。對應關於通過下面的列來關聯起來。

opid_time varchar(50):這個列儲存的是的被執行的 sql 語句在執行時的乙個序列號,這個序列號由三部分組成:timestamp(int 值,是語句被執行的時間點),線上伺服器執行時所產生的 thread_id,當前這條語句在所有被執行的語句塊中的乙個序號。產生結果類似下面的樣子:1413347135_136_3,針對同乙個語句影響多行的情況,那麼所產生的多行資料中,這個列的值都是相同的,這樣就可以找到一條語句對應的所有被影響資料的回滾語句。

於是線上庫表結果與備份庫表結構的對應關係為:

圖2 inception的備份伺服器

-未完待續-

1,inception使用規範及說明文件;

2,2014,isadba,pt-online-schema-change工具文藝用法;

4,2011,楊挺,osc 實現原理剖析;

5,2015,鄭昀,#研發解決方案#idb-資料庫自動化運維平台;

uio是如何與dpdk對接的 一

載入裝置驅動模組 裝置驅動模組被編譯成.o或者.ko,類似elf程式有乙個入口main函式,ko模組入口函式是module init igbuio pci init module igbuio pci init module 在insmod後首先執行。片段如下 static int init igb...

乙個程式是如何生成的

很多剛接觸程式設計的同學,應該都會學到乙個 hello world 的程式,通常教程中都會教先安裝乙個idea,然後在idea中敲入 編譯然後執行,簡單的 hello world 程式就完成了。但你是否有想過從敲完 後的原始檔,到輸出 hello world 的可執行檔案,這中間到底經歷了什麼過程呢...

社群助手 別人家的24小時自運轉群,是怎麼做到的?

隨著微信日活使用者的不斷增長,越來越多的個人 企業都將微信群作為了營銷推廣 娛樂交友 客戶維護等的重要場地。而隨著群數增加,群人數增加,大部分運營者遇到了群裡互動難,成員管理難 資料監控難 內容留存難等一系列問題。最近我發現一款工具 社群助手,它能極大提高社群管理效率,促進社群活躍度 監控社群運營效...