Yearning和inception搭建MySQL審覈平臺

前言

    採用開源Yearning和inception開源軟件,搭建用於MYSQL審覈及線上MYSQL語句更新的審覈平臺。

功能說明

Yearning: 基於Vue.js與Django的整套mysql-sql審覈平臺解決方案。提供基於Inception的SQL檢測及執行,爲Inception提供可視化。

Inception:是集審覈、執行、回滾於一體的一個自動化運維繫統,它是根據MySQL代碼修改過來的,用它可以很明確的,詳細的,準確的審覈MySQL的SQL語句,它的工作模式和MySQL完全相同,可以直接使用MySQL客戶端來連接,但不需要驗證權限,它相對應用程序(上層審覈流程系統等)而言,是一個服務器,在連接時需要指定服務器地址及Inception服務器的端口即可,而它相對要審覈或執行的語句所對應的線上MySQL服務器來說,是一個客戶端,它在內部需要實時的連接數據庫服務器來獲取所需要的信息,或者直接在在線上執行相應的語句及獲取binlog等,Inception就是一箇中間性質的服務。

yearning.jpg

 

操作系統及IP信息

編號

服務器名稱

IP

操作系統

1

Centos_6

10.21.88.51 

CentOS release 6.8 (Final) 

 

各軟件版本及安裝路徑

編號

軟件

版本信息

安裝路徑

代碼目錄

1

python

3.6.6

/usr/local/python


2

Yearning

無(最新)

/opt/Yearning


3

Inception

2.1.50

/usr/local/inception


4

nginx

1.10.2

Yum安裝

 /usr/share/nginx/html

5

mysql

5.7.21

/usr/local/mysql



安裝過程

依賴包安裝

yum -y install cmake bison  ncurses-devel gcc gcc-c++  openssl-devel

 

inception安裝

複製代碼

cd /opt

wget https://github.com/mysql-inception/inception/archive/master.zipmkdir -p /usr/local/inception

mkdir -p /inception/{data,logs}

unzip master.zip -d /inception

cd /inception/inception-master

cmake -DWITH_DEBUG=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/inception  -DMYSQL_DATADIR=/inception/data -DWITH_SSL=yes -DCMAKE_BUILD_TYPE=RELEASE -DWITH_ZLIB=bundled -DMY_MAINTAINER_CXX_WARNINGS="-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing  -Wno-unused-parameter -Woverloaded-virtual" -DMY_MAINTAINER_C_WARNINGS="-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement"make && make install

複製代碼

 配置

複製代碼

--編輯參數文件

vim /etc/inc.cnf

[inception]

general_log=1 #這個參數就是原生的MySQL的參數,用來記錄在Inception服務上執行過哪些語句,用來定位一些問題等

general_log_file=/usr/local/inception/data/inception.log #設置general log寫入的文件路徑

port=6669   #Inception的服務端口

socket=/usr/local/inception/data/inc.socket #Inception的套接字文件存放位置

character-set-server=utf8 #mysql原生參數

#Inception 審覈規則

inception_check_autoincrement_datatype=1 #當建表時自增列的類型不爲int或者bigint時報錯

inception_check_autoincrement_init_value=1 #當建表時自增列的值指定的不爲1,則報錯

inception_check_autoincrement_name=1 #建表時,如果指定的自增列的名字不爲ID,則報錯,說明是有意義的,給提示

inception_check_column_comment=1 #建表時,列沒有註釋時報錯

inception_check_column_default_value=0 #檢查在建表、修改列、新增列時,新的列屬性是不是要有默認值

inception_check_dml_limit=1 #在DML語句中使用了LIMIT時,是不是要報錯

inception_check_dml_orderby=1 #在DML語句中使用了Order By時,是不是要報錯

inception_check_dml_where=1 #在DML語句中沒有WHERE條件時,是不是要報錯

inception_check_identifier=1 #打開與關閉Inception對SQL語句中各種名字的檢查,如果設置爲ON,則如果發現名字中存在除數字、字母、下劃線之外的字符時,會報Identifier "invalidname" is invalid, valid options: [a-z,A-Z,0-9,_].

inception_check_index_prefix=1 #是不是要檢查索引名字前綴爲"idx_",檢查唯一索引前綴是不是"uniq_"inception_check_insert_field=1  #是不是要檢查插入語句中的列鏈表的存在性

inception_check_primary_key=1 #建表時,如果沒有主鍵,則報錯

inception_check_table_comment=0 #建表時,表沒有註釋時報錯

inception_check_timestamp_default=0 #建表時,如果沒有爲timestamp類型指定默認值,則報錯

inception_enable_autoincrement_unsigned=1 #自增列是不是要爲無符號型

inception_enable_blob_type=0 #檢查是不是支持BLOB字段,包括建表、修改列、新增列操作 默認開啓

inception_enable_column_charset=0 #允許列自己設置字符集

inception_enable_enum_set_bit=0 #是不是支持enum,set,bit數據類型

inception_enable_foreign_key=0 #是不是支持外鍵

inception_enable_identifer_keyword=0 #檢查在SQL語句中,是不是有標識符被寫成MySQL的關鍵字,默認值爲報警。

inception_enable_not_innodb=0 #建表指定的存儲引擎不爲Innodb,不報錯

inception_enable_nullable=0 #創建或者新增列時如果列爲NULL,不報錯

inception_enable_orderby_rand=0 #order by rand時是不是報錯

inception_enable_partition_table=0 #是不是支持分區表

inception_enable_select_star=0 #Select*時是不是要報錯

inception_enable_sql_statistic=1 #設置是不是支持統計Inception執行過的語句中,各種語句分別佔多大比例,如果打開這個參數,則每次執行的情況都會在備份數據庫實例中的inception庫的statistic表中以一錄存儲這次操作的統計情況,每次操作對應一條記錄,這條記錄中含有的信息是各種類型的語句執行次數情況。

inception_max_char_length=16 #當char類型的長度大於這個值時,就提示將其轉換爲VARCHAR

inception_max_key_parts=5 #一個索引中,列的最大個數,超過這個數目則報錯

inception_max_keys=16 #一個表中,最大的索引數目,超過這個數則報錯

inception_max_update_rows=10000 #在一個修改語句中,預計影響的最大行數,超過這個數就報錯

inception_merge_alter_table=1 #在多個改同一個表的語句出現是,報錯,提示合成一個

#inception 支持 OSC 參數

inception_osc_bin_dir=/user/bin #用於指定pt-online-schema-change腳本的位置,不可修改,在配置文件中設置

inception_osc_check_interval=5 #對應OSC參數--check-interval,意義是Sleep time between checks for --max-lag.

inception_osc_chunk_size=1000 #對應OSC參數--chunk-size

inception_osc_chunk_size_limit=4 #對應OSC參數--chunk-size-limit

inception_osc_chunk_time=0.1 #對應OSC參數--chunk-time

inception_osc_critical_thread_connected=1000 #對應參數--critical-load中的thread_connected部分

inception_osc_critical_thread_running=80 #對應參數--critical-load中的thread_running部分

inception_osc_drop_new_table=1 #對應參數--[no]drop-new-table

inception_osc_drop_old_table=1 #對應參數--[no]drop-old-table

inception_osc_max_lag=3 #對應參數--max-lag

inception_osc_max_thread_connected=1000 #對應參數--max-load中的thread_connected部分

inception_osc_max_thread_running=80 #對應參數--max-load中的thread_running部分

inception_osc_min_table_size=0 # 這個參數實際上是一個OSC的開關,如果設置爲0,則全部ALTER語句都走OSC,如果設置爲非0,則當這個表佔用空間大小大於這個值時才使用OSC方式。單位爲M,這個表大小的計算方式是通過語句:"select (DATA_LENGTH + INDEX_LENGTH)/1024/1024 from information_schema.tables where table_schema = 'dbname' and table_name = 'tablename'"來實現的

inception_osc_on=0 #一個全局的OSC開關,默認是打開的,如果想要關閉則設置爲OFF,這樣就會直接修改

inception_osc_print_none=1 #用來設置在Inception返回結果集中,對於原來OSC在執行過程的標準輸出信息是不是要打印到結果集對應的錯誤信息列中,如果設置爲1,就不打印,如果設置爲0,就打印。而如果出現錯誤了,則都會打印

inception_osc_print_sql=1 #對應參數--print

#備份服務器信息,注意改成你的機器.用於回滾。

inception_remote_system_password=P@ssw0rd

inception_remote_system_user=incep_rw

inception_remote_backup_port=3306inception_remote_backup_host=10.10.3.70inception_support_charset=utf8 #表示在建表或者建庫時支持的字符集,如果需要多個,則用逗號分隔,影響的範圍是建表、設置會話字符集、修改表字符集屬性等

複製代碼

 

啓動及檢測

複製代碼

nohup /usr/local/inception/bin/Inception --defaults-file=/etc/inc.cnf  & netstat -tulpn | grep 6669       //inception的默認端口是6669/usr/local/inception/bin/mysql -uroot -h127.0.0.1 -P6669  //聯接inception,和mysql一樣的方式inception get variables;    //查看inception的所有參數

複製代碼

 

安裝PYTHON

複製代碼

cd /usr/local/src

tar -xvf Python-3.6.6.tgz

mkdir -p /usr/local/python/3.6.6/lib

./configure --enable-shared --prefix=/usr/local/python/3.6.6 LDFLAGS="-Wl,-rpath /usr/local/python/3.6.6/lib"make && make install

 

軟連接

cp /usr/bin/python /usr/bin/python2.6.6ln -fs /usr/local/python/3.6.6/bin/python3.6 /usr/bin/python

ln -fs /usr/local/python/3.6.6/bin/pip3 /usr/bin/pip

python -v

Yum修改

vi /usr/bin/yum

將頭部 #!/usr/bin/python 修改爲 #!/usr/bin/python2.6.6

複製代碼

 

Yearning安裝

cd /opt

git clone https://github.com/cookieY/Yearning.git

 

 編輯 Yearning/src/deploy.conf

複製代碼

[mysql]

db = 所創建的庫名

address = 數據庫地址

port = 數據庫端口

password = 數據庫密碼

username = 數據庫用戶

 

[host]

ipaddress = 服務器ip地址   (消息推送時顯示平臺地址)

複製代碼

 

由於Inception 並不原生支持pymysql,所以需更改pymysql相關源碼 注: 在install 文件夾下已經修改的connections.py 和 cursors.py 直接替換即可

pip3 install -r requirements.txt  #安裝相應python依賴庫

python3 manage.py makemigrations core && python3 manage.py migrate core #初始化數據庫

echo "from core.models import Account;Account.objects.create_user(username='admin', password='Yearning_admin', group='admin',is_staff=1)" | python manage.py shell #添加初始化用戶

echo "from core.models import grained;grained.objects.get_or_create(username='admin', permissions={'person': [], 'ddl': '1', 'ddlcon': [], 'dml': '1', 'dmlcon': [], 'dic': '1', 'diccon': [], 'dicedit': '0', 'user': '1', 'base': '1', 'dicexport': '0', 'query': '1', 'querycon': []})" | python manage.py shell #初始化權限

echo "from core.models import globalpermissions; globalpermissions.objects.get_or_create(authorization='global', inception={'host': '', 'port': '', 'user': '', 'password': '', 'back_host': '', 'back_port': '', 'back_user': '', 'back_password': ''}, ldap={'type': '', 'host': '', 'sc': '', 'domain': '', 'user': '', 'password': ''}, message={'webhook': '', 'smtp_host': '', 'smtp_port': '', 'user': '', 'password': '', 'to_user': '', 'mail': False, 'ding': False}, other={'limit': '', 'con_room': ['AWS', 'Aliyun', 'Own', 'Other'], 'foce': '', 'multi': False, 'query': False, 'sensitive_list': [], 'sensitive': ''})" | python manage.py shell #初始化動態配置信息

cp -rf Yearning/webpage/dist/* $NGINX_HOME/html/   #複製編譯好的靜態文件到nginx html目錄下(如自行更改Nginx靜態路徑地址則將靜態文件複製到對應靜態文件目錄下)

systemctl start nginx  #啓動nginx

$PYTHON_HOME/bin/gunicorn  settingConf.wsgi:application -c gunicorn.conf #啓動django

默認賬號: admin  密碼:Yearning_admin

 

使用說明

需要先行創建用戶(Yearning的權限分爲管理員及使用人兩個選項,缺省只有admin管理員賬號,用於審覈,請創建:使用人賬號用於提交的MYSQL審覈),輸入用戶名密碼登錄:

112.jpg


用戶
登錄後點擊“管理”,如下圖紅色圓圈部分

113.jpg

 

點擊“用戶”進行用戶 添加。(例:如下添加了一個appuser使用人用戶)

114.jpg


數據庫設置
(配置用於連接審覈的數據庫信息,如下設置了一個測試連接)

115.jpg


設置
(inception相關設置,其它設置略)

116.jpg

如上相關“管理”下的“用戶”“數據庫”“設置”後,就可以進行數據審覈操作了。

工單的提交和審覈

工單提交

採用使用者登錄後創建工單,如下圖:(信息填寫好後,先檢測無誤後提交)

 

審覈(採用管理員賬戶登錄,進入如下界面審覈)

118.jpg

 

點擊待審覈對應工單的“操作”進入如下界面:

119.jpg

執行操作既完成審覈操作。


回滾操作:(管理員執行,且必須進行inception備份服務器的相關設置)
120.jpg

工單審批後,在如下圖位置有“查看回滾語句”,進入如下界面後點擊提交工單,再次審批既完成回滾操作。

    以上爲Yearning和inception搭建的MySQL審覈平臺,及簡單使用介紹,關於Yearning的詳細使用可以參考其官方文檔。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章