決定工作效率和工作品質的,首先是工作态度,其次才是能力。你用了多少心,你的成就就會有多少。凡事全力以赴,盡心盡力,才能有所建樹。
某上市公司運維開發崗,參與了多個重大項目的開發,見證了近幾年這一行業的發展并緻力于其中,熱衷 Python 自動化運維并樂于跟大家分享。
關于視訊大家我們提供了一個百度網盤連結,大家感興趣的可以自行下載下傳觀看
Inception 是集稽核、執行、復原于一體的一個自動化運維系統,它是根據MySQL 代碼修改過來的,用它可以很明确的,詳細的,準确的稽核 MySQL 的SQL 語句,它的工作模式和 MySQL 完全相同,可以直接使用 MySQL 用戶端來連接配接,但不需要驗證權限,它相對應用程式(上層稽核流程系統等)而言,是一個伺服器,在連接配接時需要指定伺服器位址及 Inception 伺服器的端口即可,而它相對要稽核或執行的語句所對應的線上 MySQL 伺服器來說,是一個用戶端,它在内部需要實時的連接配接資料庫伺服器來擷取所需要的資訊,或者直接在線上上執行相應的語句及擷取 binlog 等,Inception 就是一個中間性質的服務。下圖所示為 Inception 的架構。

Inception 提供的功能很豐富,首先,它可以對送出的所有語句的文法分析,如果文法有問題,都會将相應的錯誤資訊傳回給稽核者。 還提供語義分析,當一個表,庫,列等資訊不正确或者不符合規範的時候報錯,或者使用了一個不存在的對象時報錯等等。 還提供了很多針對 SQL 規範性限制的功能,這些 DBA都是可以通過系統參數來配置的。 更進階的功能是,可以輔助 DBA 分析一條查詢語句的性能,如果沒有使用索引或者某些原因導緻查詢很慢,都可以檢查。還提供 SQL 語句的執行功能,可執行的語句類型包括常用的 DML 及 DDL語句及 truncate table 等操作。 Inception 在執行 DML 時還提供生成復原語句的功能,對應的操作記錄及復原語句會被存儲在備份機器上面,備份機器通過配置 Inception 參數來指定。
以下安裝是 CentOS 系統,如果是 Ubuntu/Debian 請看官方文檔。
2.1 Git 下載下傳源碼包
2.2 安裝依賴包
2.3 開始編譯安裝
首先就是編譯,在源碼根目錄下面有一個檔案 inception_build.sh,執行指令 sh inception_build.sh,會輸出使用方法。 實際上隻需要執行 inception_build.sh debug [Xcode] 即可,後面的平台是可選的,如果不指定就是 linux 平台,而如果要指定是 Xcode,就後面指定 Xcode,而 debug 是編譯的目錄,編譯之後,所有的生成檔案都在這個目錄下面,包括可執行檔案 Inception。可執行檔案在debug/sql/Debug/ 目錄下面(不同平台有可能不相同)。
順便強調說一下,實際上編譯 Inception,和編譯 MySQL 源碼是一樣的,如果有不太了解的同學,可以先在網上看看關于 MySQL 源碼的編譯,我想遇到的問題都可以解決。
編譯完成之後,就是使用了,那麼需要一個配置檔案(inc.cnf):
2.4 啟動 Inception 程式
啟動方式和 MySQL 是一樣的。
注意:因為 Inception 支援 OSC 執行的功能,是通過調用 pt-online-schema-change 工具來做的,但如果 Inception 背景啟動(&)的話,可能會導緻 pt-online-schema-change 在執行完成之後,長時間不傳回,進而導緻 Inception卡死的問題,這個問題官方後面會解決,但現階段請盡量不要使用背景啟動的方式,或者可以使用 nohup Inception & 的方式來啟動。
啟動如果不報錯的話,說明已經啟動成功了,實際上很難讓它報錯,因為非常輕量級。
啟動成功之後,可以簡單試一下看,通過 MySQL 用戶端
登入上去之後,再執行一個指令:
輸出了所有的變量,恭喜你,已經啟動成功了,都說了非常簡單。
Inception 實際上是一個服務程式,那麼它應該有自己的一套友好的使用方式,必須要具備簡單、高效、易用等特性。那麼為了讓 Inception 具有這些特點,在設計之初,就規定了它的使用方式,如下所述。
通過 Inception 對語句進行稽核時,必須要告訴 Inception 這些語句對應的資料庫位址、資料庫端口以及 Inception 連接配接資料庫時使用的使用者名、密碼等資訊,而不能簡單的隻是執行一條 sql 語句,是以必須要通過某種方式将這些資訊傳達給 Inception。而我們選擇的方式是,為了不影響語句的意義,将這些必要資訊都以注釋的方式放在語句最前面,也就是說所有這些資訊都是被 /**/括起來的,每一個參數都是通過分号來分隔,類似的方式為:
當然支援的參數不止是這幾個,後面還會介紹一些其它的參數。 Inception 要做的是一個語句塊的稽核,需要引入一個規則,将要執行的語句包圍起來, Inception 規定,在語句的最開始位置,要加上 inception_magic_start; 語句,在執行語句塊的最後加上 inception_magic_commit; 語句,這 2 個語句在 Inception 中都是合法的、具有标記性質的可被正确解析的 SQL 語句。被包圍起來的所有需要稽核或者執行的語句都必須要在每條之後加上分号,其實就是批量執行 SQL 語句。(包括 use database 語句之後也要加分号,這點與 MySQL 用戶端不同),不然存在文法錯誤。
在具體執行時,在沒有解析到 inception_magic_start 之前如果發現要執行其它的語句,則直接報錯,因為規則中 inception_magic_start 是強制的。而如果在執行的語句塊最後沒有出現 inception_magic_commit,則直接報錯,不會做任何操作。 在前面注釋部分,需要指定一些操作的選項,包括線上使用者名、密碼、資料庫位址、檢查/執行等。下面是一個簡單的例子:
那麼上面這一段就是一批正常可以執行的 SQL 語句,目前執行隻支援通過C/C++ 接口、Python 接口來對 Inception 通路,這一段必須是一次性的通過執行接口送出給 Inception,那麼在處理完成之後,Inception 會傳回一個結果集,來告訴我們這些語句中存在什麼錯誤,或者是完全正常等等。
請不要将下面的 SQL 語句塊,放到 MySQL 用戶端中執行,因為這是一個自動化運維工具,如果使用互動式的指令行來使用的話沒有意義,隻能是通過寫程式來通路 Inception 伺服器。
而可以通過 MySQL 用戶端來執行的,隻有是 Inception 指令,請參考<<inception 指令集語句>>一節。
下面是一段執行上面語句的 Python 程式的例子:
執行這段程式之後,傳回的結果如下:
網上目前傳的最多的是 Inception_web,是對 Inception 的 web 封裝的界面,可以通過 web 界面來實作相關功能,用 Python 2.7 寫的,基于 flask 架構,功能比較簡單,無法滿足企業級使用,後面的需求需要自己開發
後續我們會介紹一款基于 Django 開發的 Inception _web 管理端,帶有完整的使用者管理,權限控制及稽核執行等功能,目前沒有開源,有興趣可以近期關注。
加入QQ群,擷取公開課視訊和相關資料分享
技術交流QQ群:365534424
本文轉自 xjtuhit 51CTO部落格,原文連結:http://blog.51cto.com/51reboot/2049821