Inception是一個集審核、執行、備份及生成回滾語句于一身的MySQL運維工具,通過對執行SQL的語法解析,返回基于自定義規則的審核結果,并提供執行和備份及生成回滾語句的功能。Inception工作模式和MySQL完全相同,可以直接使用MySQL客戶端來連接,但不需要驗證權限,它相對應用程序(上層審核流程系統等)而言,是一個服務器,在連接時需要指定服務器地址及Inception服務器的端口即可,而它相對要審核或執行的語句所對應的線上MySQL服務器來說,是一個客戶端,它在內部需要實時的連接數據庫服務器來獲取所需要的信息,或者直接在在線上執行相應的語句及獲取binlog等,Inception就是一個中間性質的服務。
Inception實際上是一個服務程序,那么它應該有自己的一套友好的使用方式,必須要具備簡單、高效、易用等特性。那么為了讓Inception具有這些特點,在設計之初,就規定了它的使用方式,如下所述。
通過Inception對語句進行審核時,必須要告訴Inception這些語句對應的數據庫地址、數據庫端口以及Inception連接數據庫時使用的用戶名、密碼等信息,而不能簡單的只是執行一條sql語句,所以必須要通過某種方式將這些信息傳達給Inception。而我們選擇的方式是,為了不影響語句的意義,將這些必要信息都以注釋的方式放在語句最前面,也就是說所有這些信息都是被/**/括起來的,每一個參數都是通過分號來分隔,類似的方式為:
/*--user=username;--password=xxxx;--host=127.0.0.1;--port=3306;*/
當然支持的參數不止是這幾個,還有一些其它的參數
主要選項列表:
參數 | 默認值 | 數據類型 | 說明 |
host | 127.0.0.1 | string | 線上數據庫Ip地址 |
port | 0 | int | 線上數據庫端口 |
user | ‘’ | string | 線上數據庫用戶名 |
password | ‘’ | string | 線上數據庫密碼 |
check | False | bool | 開啟審核功能 |
execute | False | bool | 開啟執行功能 |
ignore_warnings | False | bool | 是否忽略警告,僅在執行時生效。該參數控制有警告時是繼續執行還是中止 |
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服務器。
下面是一段執行上面語句的Python程序的例子:
執行這段程序之后,返回的結果如下:
從返回結果可以看到,每一行語句的審核及執行信息,最前面打印的是field_names,表示Inception的返回結果集的列名信息,總共包括十個列,下面是每個列對應的結果
標題詳解:
Id:sql序號
Stage:所處階段
error_level:錯誤分級,通過/警告/錯誤
stage_status:階段處理匯報信息
error_message:全部錯誤信息
Sql:語句塊中被分離出的一條
affected_rows:預計/實際影響行數
Sequence:備份/回滾序列號
backup_dbname:備份數據庫名字
execute_time:當前語句執行時間,單位秒
Inception支持很多可配置的參數,這些配置參數都是全局參數,因為對于同一個服務的規則,不應該經常變化,或者說不應該出現一些業務是這樣的規則,而另一些業務是那樣的規則,所以這些變量一經設置,就影響所有的審核。如果確實一個公司有多個規則,則建議配置多套Inception服務,在各自的配置文件中指定相應的參數的值。
設置或者打印這些變量的值,可以通過MySQL客戶端連接到Inception服務器,通過新的語法命令來實現。連接Inception的時候,只需要指定Inception的地址及端口即可,其它用戶名密碼可以不指定,因為Inception沒有權限驗證的過程。
Inception打印變量時,不支持像原來的MySQL服務器一樣可以showvariables like ‘%name%’這樣實現模糊匹配,只能是精確匹配,如果找不到則返回空結果集,或者可以打印所有變量。語法如下:
支持語句 | 意義 |
inception get variables ‘variable_name’; | 通過variable_name指定變量名稱,只顯示指定的變量名的值 |
inception get variables; | 顯示Inception所有變量的值 |
inception set variable_name=value; | 設置變量名為variable_name的變量的值 |
線上服務器必須要打開 binlog,在啟動時需要設置參數log_bin、log_bin_index等關于 binlog 的參數。不然不會備份及生成回滾語句。
參數binlog_format必須要設置為 mixed 或者 row 模式,通過語句: set global binlog_format=mixed/row 來設置,如果是 statement 模式,則不做備份及回滾語句的生成。
參數 server_id 必須要設置為非0及非1,通過語句:set global server_id=server_id;來設置,不然在備份時會報錯。
線上服務器一定要有指定用戶名的權限,這個是在語句前面的注釋中指定的,做什么操作就要有什么權限,否則還是會報錯,如果需要執行的功能,則要有線上執行語句的權限,比如DDL及DML,同時如果要執行inception show 等遠程命令的話,有些語句是需要特殊權限的,這些權限也是需要授予的,關于權限這個問題,因為一般Inception是運行在一臺固定機器上面的,那么在選項中指定的用戶名密碼,實際上是Inception機器對線上數據庫訪問的權限,所以建議在使用過程中,使用專門固定的帳號來讓Inception使用,最好是一個只讀一個可寫的即可,這樣在執行時用可寫,審核或者查看線上狀態或者表庫結果時用只讀即可,這樣更安全。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130148.html
摘要:因為傳統的數據庫管理方式在當前這種架構下依靠手工或者借助簡單的工具是無法應對多活架構大規模管理帶來的復雜性,因此平臺化顯得非常重。我們在做的方案時做了充分調查及論證,最終沒有選擇這種方式。 蔡鵬,2015年加入餓了么,見證了餓了么業務&技術從0到1的發展過程,并全程參與了數據庫及DBA團隊高速發展全過程。同時也完成個人職能的轉型-由運維DBA到DEV-DBA的轉變,也從DB的維穩轉變到專心為...
摘要:原始版本最早的卷積方式還沒有任何騷套路,那就也沒什么好說的了。通過卷積核插的方式,它可以比普通的卷積獲得更大的感受野,這個的就介紹到這里。和前面不同的是,這個卷積是對特征維度作改進的。 1.原始版本最早的卷積方式還沒有任何騷套路,那就也沒什么好說的了。見下圖,原始的conv操作可以看做一個2D版本的無隱層神經網絡。附上一個卷積詳細流程:【TensorFlow】tf.nn.conv2d是怎樣實...
摘要:嚴肅的開場白故事要從深度學習說起。本文從視頻分類的角度,對深度學習在該方向上的算法進行總結。數據集熟悉深度學習的朋友們應該清楚,深度學習是一門數據驅動的技術,因此數據集對于算法的研究起著非常重要的作用。是一個比較成功的傳統方法與深度學習算 showImg(https://segmentfault.com/img/bV7hQP?w=900&h=330); 不嚴肅的開場白 視頻社交已經成為...
摘要:前言本文將介紹一種在線網絡工具,可用于可視化各種經典的卷積神經網絡結構。其實本文要介紹的工具就是基于開發的,但更像是一個工具包一樣,可以方便找到各種經典卷積神經網絡的。 前言本文將介紹一種在線網絡工具,可用于可視化各種經典的卷積神經網絡結構。學習Caffe的同學,一定很熟悉Netscope。它就是用來可視化Caffe的prototxt文件,那么prototxt文件又是啥呢?簡而言之,prot...
摘要:卷積神經網絡原理淺析卷積神經網絡,最初是為解決圖像識別等問題設計的,當然其現在的應用不僅限于圖像和視頻,也可用于時間序列信號,比如音頻信號文本數據等。卷積神經網絡的概念最早出自世紀年代科學家提出的感受野。 卷積神經網絡原理淺析 ?卷積神經網絡(Convolutional?Neural?Network,CNN)最初是為解決圖像識別等問題設計的,當然其現在的應用不僅限于圖像和視頻,也可用于時間序...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20