Centos7.4 x86_64上mysql
inception是基於mysql 5.6源碼修改而來,充分利用語法分析功能,其安裝和MySQL編譯安裝無二。
安裝完成後,直接對接主庫,當審覈語句提交後,自動從主庫獲取語句上下文表、索引等進行審覈,審覈經過後便可寫入主庫。c++
yum install gcc gcc-c++ libgcc cmake ncurses-devel openssl-develgit
cmake版本2.8.12github
wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gzsql
tar zxvf bison-2.5.1.tar.gz數據庫
cd bison-2.5.1服務器
./configuresocket
make && make installide
bison -V 查看版本ui
wget https://github.com/mysql-inception/inception/archive/master.zip
unzip master.zip
cd inception-master
mkdir debug
cd debug
cmake .. -DWITH_DEBUG=OFF -DWITH_ZLIB=system -DCMAKE_INSTALL_PREFIX=/usr/local/inception -DWITH_SSL=bundled -DCMAKE_BUILD_TYPE=RELEASE -DWITH_ZLIB=bundled
make install
以上或者
sh inception_build.sh debug
啓動
/usr/local/inception/bin/Inception --port=6669 &
用mysql客戶端鏈接
mysql -uroot -h127.0.0.1 -P6669
mysql>inception get variables;
輸出全部變量,即啓動成功。
配置文件
vi /etc/inc.cnf
[inception]
general_log=1 #這個參數就是原生的MySQL的參數,用來記錄在Inception服務上執行過哪些語句,用來定位一些問題等
general_log_file=/usr/local/inception/data/inception.log #設置general log寫入的文件路徑
port=6669 #Inception的服務端口
socket=/data/inception/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=1 #建表時,表沒有註釋時報錯
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=/data/temp #用於指定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=1 # 這個參數其實是一個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=1 #一個全局的OSC開關,默認是打開的,若是想要關閉則設置爲OFF,這樣就會直接修改
inception_osc_print_none=1 #用來設置在Inception返回結果集中,對於原來OSC在執行過程的標準輸出信息是否是要打印到結果集對應的錯誤信息列中,若是設置爲1,就不打印,若是設置爲0,就打印。而若是出現錯誤了,則都會打印
inception_osc_print_sql=1 #對應參數--print
#inception_user #這個用戶名在配置以後,在鏈接Inception的選項中能夠不指定user,這樣線上數據庫的用戶名及密碼就能夠不暴露了,能夠作爲臨時使用的一種方式,但這個用戶如今只能是用來審覈,也就是說,即便在選項中指定--enable-execute,也不能執行,這個是隻能用來審覈的賬號。
#inception_password #與上面的參數是一對,這個參數對應的是選項中的password,設置這個參數以後,能夠在選項中不指定password
inception_read_only=0 #設置當前Inception服務器是否是隻讀的,這是爲了防止一些人具備修改權限的賬號時,經過Inception誤修改一些數據,若是inception_read_only設置爲ON,則即便開了enable-execute,同時又有執行權限,也不會去執行,審覈完成即返回
#備份服務器信息
inception_remote_system_password=123456
inception_remote_system_user=root
inception_remote_backup_port=3306
inception_remote_backup_host=192.168.1.54
inception_support_charset=utf8 #表示在建表或者建庫時支持的字符集,若是須要多個,則用逗號分隔,影響的範圍是建表、設置會話字符集、修改表字符集屬性等
啓動
/usr/local/inception/bin/Inception --default-file=/etc/inc.cnf &