共計 9441 個字符,預計需要花費 24 分鐘才能閱讀完成。
本篇內容介紹了“Yearning + Inception SQL 審核平臺搭建方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Yearning 安裝:
安裝 Nginx
yum install nginx -y
按照順序安裝 MySQL
mysql-community-common-5.7.22-1.el6.x86_64.rpm
mysql-community-libs-5.7.22-1.el6.x86_64.rpm
mysql-community-client-5.7.22-1.el6.x86_64.rpm
mysql-community-server-5.7.22-1.el6.x86_64.rpm
Python 3.6 安裝
解壓
tar -xvf Python-3.6.4.tar.xz
創建目錄
mkdir -p /usr/local/python/3.6.4/lib
編譯
cd Python-3.6.4
./configure –enable-shared –prefix=/usr/local/python/3.6.4 LDFLAGS= -Wl,-rpath /usr/local/python/3.6.4/lib
make make install
軟鏈接
cp /usr/bin/python /usr/bin/python2.6.6
ln -fs /usr/local/python/3.6.4/bin/python3.6 /usr/bin/python
ln -fs /usr/local/python/3.6.4/bin/pip3 /usr/bin/pip
yum 修改
vi /usr/bin/yum
將頭部 #!/usr/bin/python 修改為 #!/usr/bin/python2.6.6
Inception 安裝
Inception 是集審核、執行、回滾于一體的一個自動化運維系統,它是根據 MySQL 代碼修改過來的,用它可以很明確的,詳細的,準確的審核 MySQL 的 SQL 語句,它的工作模式和 MySQL 完全相同,可以直接使用 MySQL 客戶端來連接,但不需要驗證權限,它相對應用程序(上層審核流程系統等)而言,是一個服務器,在連接時需要指定服務器地址及 Inception 服務器的端口即可,而它相對要審核或執行的語句所對應的線上 MySQL 服務器來說,是一個客戶端,它在內部需要實時的連接數據庫服務器來獲取所需要的信息,或者直接在在線上執行相應的語句及獲取 binlog 等,Inception 就是一個中間性質的服務。
依賴包安裝
yum install gcc gcc-c++ cmake bison openssl-devel ncurses-devel git
下載源碼包
git clone https://github.com/mysql-inception/inception.git(已經閉源,但是網上還能找到閉源之前的包)
編譯安裝 Inception
mkdir -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
CMake Error: The source /inception/inception-master/CMakeLists.txt does not match the source /opt/inception-master/CMakeLists.txt used to generate cache
rm -rf CMakeLists.txt 再執行
make make install
創建 inception 配置文件
– 編輯參數文件
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=3306
inception_remote_backup_host=10.10.3.70
inception_support_charset=utf8 #表示在建表或者建庫時支持的字符集,如果需要多個,則用逗號分隔,影響的范圍是建表、設置會話字符集、修改表字符集屬性等
啟動 Inception 程序
cd /usr/local/inception/bin
./Inception –defaults-file=/etc/inc.cnf
[1] 11179
[root@b28-11-92 bin]# 2019-06-21 15:00:31 0 [Note] Welcome to use Inception2.1.50
2019-06-21 15:00:31 11179 [Note] Server hostname (bind-address): * port: 6669
2019-06-21 15:00:31 11179 [Note] IPv6 is available.
2019-06-21 15:00:31 11179 [Note] – :: resolves to ::
2019-06-21 15:00:31 11179 [Note] Server socket created on IP: :: .
查看 Inception 進程
ps -ef | grep Inception
root 11179 30011 0 15:00 pts/1 00:00:00 ./Inception –defaults-file=/etc/inc.cnf
測試
mysql -uroot -h227.0.0.1 -P6669
連接成功后執行 inception get variables;
輸出了所有的變量,表示已經啟動成功了
Yearning 安裝
git clone https://github.com/cookieY/Yearning.git
登錄 MySQL 創建庫 yearning 庫
create database Yearning DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
安裝相應 python 依賴庫
cd Yearning/src
pip install -r requirements.txt
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting Django==2.1.5 (from -r requirements.txt (line 1))
Could not fetch URL https://pypi.python.org/simple/django/: There was a problem confirming the ssl certificate: Can t connect to HTTPS URL because the SSL module is not available. – skipping
Could not find a version that satisfies the requirement Django==2.1.5 (from -r requirements.txt (line 1)) (from versions:)
No matching distribution found for Django==2.1.5 (from -r requirements.txt (line 1))
修改 Setup 文件
Python-3.6.4/Modules
vim Setup
#Socket module helper for socket(2)
_socket socketmodule.c timemodule.c
#Socket module helper for SSL support; you must comment out the other
#socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
重新編譯
cd Python-3.6.4
./configure –enable-shared –prefix=/usr/local/python/3.6.4 LDFLAGS= -Wl,-rpath /usr/local/python/3.6.4/lib
make
make install
配置,編輯 Yearning/src/deploy.conf 文件
[mysql]
db = 所創建的庫名
address = 數據庫地址
port = 數據庫端口
password = 數據庫密碼
username = 數據庫用戶
[host]
ipaddress = 服務器 ip 地址: 端口 (涉及跨域十分重要!! 設置不正確將無法登陸!!)
如 本機地址為 192.168.137.13 nginx 設置端口為 80
則應填寫為 192.168.137.13:80 之后通過該地址訪問平臺。
[Inception]
ip = Inception 地址
port = Inception 端口
user = Inception 用戶名
password = Inception 密碼
backupdb = 備份數據庫地址
backupport = 備份數據庫端口
backupuser = 備份數據庫用戶名
backuppassword = 備份數據庫密碼
[LDAP] LDAP 相關設置
LDAP_SERVER = LDAP 服務地址
LDAP_SCBASE = LDAP dc 設置 如 dc=xxx,dc=com
LDAP_DOMAIN = LDAP 域名 如 xxx.com
[email] 郵箱推送相關設置
username = 郵箱發件賬號 如 xxxx@163.com
password = 郵箱發件賬號密碼
smtp_server = 郵箱 stmp 地址, 具體地址請咨詢對應郵箱提供者
初始化數據庫
python manage.py makemigrations
python manage.py migrate
若報錯 ModuleNotFoundError: No module named Crypto
pip install pycrypto
重新初始化數據庫
python manage.py makemigrations
python manage.py migrate
添加初始化用戶
echo from core.models import Account;Account.objects.create_user(username= admin , password= admin123456 , group= admin ,is_staff=1) | python manage.py shell
初始化權限
echo from core.models import grained;grained.objects.get_or_create(username= admin , permissions={ ddl : 1 , ddlcon : [], dml : 1 , dmlcon : [], dic : 1 , diccon : [], dicedit : 0 , query : 1 , querycon : [], user : 1 , base : 1 , dicexport : 0}) | python manage.py shell
復制編譯好的靜態文件到 nginx html 目錄下(dist 目錄通過 npm run build 生成)
cd Yearning/webpage/dist
cp -rf * /usr/share/nginx/html/
/etc/init.d/nginx restart
啟動 django
cd Yearning/src
python manage.py runserver 0.0.0.0:8000
訪問首頁 http://192.168.17.77
注意事項:
使用默認賬號: admin 密碼:admin123456 登陸即可使用,可能會出現登陸不了的情況(無法跳轉頁面),這是由于跨域的問題,解決這個問題可以參考:http://blog.csdn.net/apple9005/article/details/54427902
注意事項
默認超級管理員只擁有各個頁面的訪問權限, 其他的權限需自行增加!詳情請查看使用說明用戶管理
由于 Inception 并不原生支持 pymysql,所以需更改 pymysql 相關源碼
修改 $PYTHON_HOME/lib/python3.6/site-packages/pymysql 下
connections.py 和 cursors.py 兩個文件
找到 connections.py 786 行
if int(self.server_version.split( . , 1)[0]) = 5:
self.client_flag |= CLIENT.MULTI_RESULTS
更改為:
try:
if int(self.server_version.split( . , 1)[0]) = 5:
self.client_flag |= CLIENT.MULTI_RESULTS
except:
if self.server_version.split(. , 1)[0] = Inception2 :
self.client_flag |= CLIENT.MULTI_RESULTS
找到 cursors.py
if self._result and (self._result.has_next or not self._result.warning_count):
return
更改為
if self._result:
return
“Yearning + Inception SQL 審核平臺搭建方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!