溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

發(fā)布時(shí)間:2020-05-27 17:11:14 來(lái)源:網(wǎng)絡(luò) 閱讀:332 作者:三月 欄目:系統(tǒng)運(yùn)維

下面一起來(lái)了解下MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維這篇短內(nèi)容是你想要的。

一、Inception 簡(jiǎn)介

Inception 是集審核、執(zhí)行、回滾于一體的一個(gè)自動(dòng)化運(yùn)維系統(tǒng),它是根據(jù)MySQL 代碼修改過(guò)來(lái)的,用它可以很明確的,詳細(xì)的,準(zhǔn)確的審核 MySQL 的SQL 語(yǔ)句,它的工作模式和 MySQL 完全相同,可以直接使用 MySQL 客戶端來(lái)連接,但不需要驗(yàn)證權(quán)限,它相對(duì)應(yīng)用程序(上層審核流程系統(tǒng)等)而言,是一個(gè)云服務(wù)器,在連接時(shí)需要指定云服務(wù)器地址及 Inception云服務(wù)器的端口即可,而它相對(duì)要審核或執(zhí)行的語(yǔ)句所對(duì)應(yīng)的線上 MySQL云服務(wù)器來(lái)說(shuō),是一個(gè)客戶端,它在內(nèi)部需要實(shí)時(shí)的連接數(shù)據(jù)庫(kù)云服務(wù)器來(lái)獲取所需要的信息,或者直接在在線上執(zhí)行相應(yīng)的語(yǔ)句及獲取 binlog 等,Inception 就是一個(gè)中間性質(zhì)的服務(wù)。下圖所示為 Inception 的架構(gòu)。

MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

Inception 提供的功能很豐富,首先,它可以對(duì)提交的所有語(yǔ)句的語(yǔ)法分析,如果語(yǔ)法有問(wèn)題,都會(huì)將相應(yīng)的錯(cuò)誤信息返回給審核者。 還提供語(yǔ)義分析,當(dāng)一個(gè)表,庫(kù),列等信息不正確或者不符合規(guī)范的時(shí)候報(bào)錯(cuò),或者使用了一個(gè)不存在的對(duì)象時(shí)報(bào)錯(cuò)等等。 還提供了很多針對(duì) SQL 規(guī)范性約束的功能,這些 DBA都是可以通過(guò)系統(tǒng)參數(shù)來(lái)配置的。 更高級(jí)的功能是,可以輔助 DBA 分析一條查詢語(yǔ)句的性能,如果沒有使用索引或者某些原因?qū)е虏樵兒苈?,都可以檢查。還提供 SQL 語(yǔ)句的執(zhí)行功能,可執(zhí)行的語(yǔ)句類型包括常用的 DML 及 DDL語(yǔ)句及 truncate table 等操作。 Inception 在執(zhí)行 DML 時(shí)還提供生成回滾語(yǔ)句的功能,對(duì)應(yīng)的操作記錄及回滾語(yǔ)句會(huì)被存儲(chǔ)在備份機(jī)器上面,備份機(jī)器通過(guò)配置 Inception 參數(shù)來(lái)指定。

項(xiàng)目地址:https://github.com/mysql-inception/inception
文檔地址:http://mysql-inception.github.io/inception-document/inception

二、Inception 安裝

以下安裝是 CentOS 系統(tǒng),如果是 Ubuntu/Debian 請(qǐng)看官方文檔。

2.1 Git 下載源碼包
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

2.2 安裝依賴包
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

2.3 開始編譯安裝

首先就是編譯,在源碼根目錄下面有一個(gè)文件 inception_build.sh,執(zhí)行命令 sh inception_build.sh,會(huì)輸出使用方法。 實(shí)際上只需要執(zhí)行 inception_build.sh debug [Xcode] 即可,后面的平臺(tái)是可選的,如果不指定就是 linux 平臺(tái),而如果要指定是 Xcode,就后面指定 Xcode,而 debug 是編譯的目錄,編譯之后,所有的生成文件都在這個(gè)目錄下面,包括可執(zhí)行文件 Inception??蓤?zhí)行文件在debug/sql/Debug/ 目錄下面(不同平臺(tái)有可能不相同)。
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

順便強(qiáng)調(diào)說(shuō)一下,實(shí)際上編譯 Inception,和編譯 MySQL 源碼是一樣的,如果有不太了解的同學(xué),可以先在網(wǎng)上看看關(guān)于 MySQL 源碼的編譯,我想遇到的問(wèn)題都可以解決。

編譯完成之后,就是使用了,那么需要一個(gè)配置文件(inc.cnf):
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

2.4 啟動(dòng) Inception 程序

啟動(dòng)方式和 MySQL 是一樣的。
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

注意:因?yàn)?Inception 支持 OSC 執(zhí)行的功能,是通過(guò)調(diào)用 pt-online-schema-change 工具來(lái)做的,但如果 Inception 后臺(tái)啟動(dòng)(&)的話,可能會(huì)導(dǎo)致 pt-online-schema-change 在執(zhí)行完成之后,長(zhǎng)時(shí)間不返回,進(jìn)而導(dǎo)致 Inception卡死的問(wèn)題,這個(gè)問(wèn)題官方后面會(huì)解決,但現(xiàn)階段請(qǐng)盡量不要使用后臺(tái)啟動(dòng)的方式,或者可以使用 nohup Inception & 的方式來(lái)啟動(dòng)。
啟動(dòng)如果不報(bào)錯(cuò)的話,說(shuō)明已經(jīng)啟動(dòng)成功了,實(shí)際上很難讓它報(bào)錯(cuò),因?yàn)榉浅]p量級(jí)。

啟動(dòng)成功之后,可以簡(jiǎn)單試一下看,通過(guò) MySQL 客戶端
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

登錄上去之后,再執(zhí)行一個(gè)命令:
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

輸出了所有的變量,恭喜你,已經(jīng)啟動(dòng)成功了,都說(shuō)了非常簡(jiǎn)單。

三、Inception 使用

Inception 實(shí)際上是一個(gè)服務(wù)程序,那么它應(yīng)該有自己的一套友好的使用方式,必須要具備簡(jiǎn)單、高效、易用等特性。那么為了讓 Inception 具有這些特點(diǎn),在設(shè)計(jì)之初,就規(guī)定了它的使用方式,如下所述。
通過(guò) Inception 對(duì)語(yǔ)句進(jìn)行審核時(shí),必須要告訴 Inception 這些語(yǔ)句對(duì)應(yīng)的數(shù)據(jù)庫(kù)地址、數(shù)據(jù)庫(kù)端口以及 Inception 連接數(shù)據(jù)庫(kù)時(shí)使用的用戶名、密碼等信息,而不能簡(jiǎn)單的只是執(zhí)行一條 sql 語(yǔ)句,所以必須要通過(guò)某種方式將這些信息傳達(dá)給 Inception。而我們選擇的方式是,為了不影響語(yǔ)句的意義,將這些必要信息都以注釋的方式放在語(yǔ)句最前面,也就是說(shuō)所有這些信息都是被 /**/括起來(lái)的,每一個(gè)參數(shù)都是通過(guò)分號(hào)來(lái)分隔,類似的方式為:
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

當(dāng)然支持的參數(shù)不止是這幾個(gè),后面還會(huì)介紹一些其它的參數(shù)。 Inception 要做的是一個(gè)語(yǔ)句塊的審核,需要引入一個(gè)規(guī)則,將要執(zhí)行的語(yǔ)句包圍起來(lái), Inception 規(guī)定,在語(yǔ)句的最開始位置,要加上 inception_magic_start; 語(yǔ)句,在執(zhí)行語(yǔ)句塊的最后加上 inception_magic_commit; 語(yǔ)句,這 2 個(gè)語(yǔ)句在 Inception 中都是合法的、具有標(biāo)記性質(zhì)的可被正確解析的 SQL 語(yǔ)句。被包圍起來(lái)的所有需要審核或者執(zhí)行的語(yǔ)句都必須要在每條之后加上分號(hào),其實(shí)就是批量執(zhí)行 SQL 語(yǔ)句。(包括 use database 語(yǔ)句之后也要加分號(hào),這點(diǎn)與 MySQL 客戶端不同),不然存在語(yǔ)法錯(cuò)誤。

在具體執(zhí)行時(shí),在沒有解析到 inception_magic_start 之前如果發(fā)現(xiàn)要執(zhí)行其它的語(yǔ)句,則直接報(bào)錯(cuò),因?yàn)橐?guī)則中 inception_magic_start 是強(qiáng)制的。而如果在執(zhí)行的語(yǔ)句塊最后沒有出現(xiàn) inception_magic_commit,則直接報(bào)錯(cuò),不會(huì)做任何操作。 在前面注釋部分,需要指定一些操作的選項(xiàng),包括線上用戶名、密碼、數(shù)據(jù)庫(kù)地址、檢查/執(zhí)行等。下面是一個(gè)簡(jiǎn)單的例子:
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

那么上面這一段就是一批正??梢詧?zhí)行的 SQL 語(yǔ)句,目前執(zhí)行只支持通過(guò)C/C++ 接口、Python 接口來(lái)對(duì) Inception 訪問(wèn),這一段必須是一次性的通過(guò)執(zhí)行接口提交給 Inception,那么在處理完成之后,Inception 會(huì)返回一個(gè)結(jié)果集,來(lái)告訴我們這些語(yǔ)句中存在什么錯(cuò)誤,或者是完全正常等等。

請(qǐng)不要將下面的 SQL 語(yǔ)句塊,放到 MySQL 客戶端中執(zhí)行,因?yàn)檫@是一個(gè)自動(dòng)化運(yùn)維工具,如果使用交互式的命令行來(lái)使用的話沒有意義,只能是通過(guò)寫程序來(lái)訪問(wèn) Inception云服務(wù)器。

而可以通過(guò) MySQL 客戶端來(lái)執(zhí)行的,只有是 Inception 命令,請(qǐng)參考<<inception 命令集語(yǔ)句>>一節(jié)。

下面是一段執(zhí)行上面語(yǔ)句的 Python 程序的例子:
MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

執(zhí)行這段程序之后,返回的結(jié)果如下:

MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維

四、關(guān)于 Inception_web

網(wǎng)上目前傳的最多的是 Inception_web,是對(duì) Inception 的 web 封裝的界面,可以通過(guò) web 界面來(lái)實(shí)現(xiàn)相關(guān)功能,用 Python 2.7 寫的,基于 flask 框架,功能比較簡(jiǎn)單,無(wú)法滿足企業(yè)級(jí)使用,后面的需求需要自己開發(fā)

源碼地址:https://github.com/dbalihui/inception_web

看完MySQL使用工具Inception實(shí)現(xiàn)自動(dòng)化運(yùn)維這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI