Inception是一款針對MySQL的SQL語句審覈自動化運維工具。使用Inception,將會給DBA帶來更大的便利性,將DBA從繁冗的工做中解放出來,作更多的自動化工做,或者從架構方面研究如何更大程度地保證數據庫的高可用等。html
Inception的文檔地址:https://github.com/cookieY/inception-document/tree/master/docspython
Inception的源代碼能夠在Github上直接下載,開源GitHub地址爲:
https://github.com/mysql-inception/inception.gitmysql
獲取Inception源代碼:nginx
git clone https://github.com/mysql-inception/inception.git
依賴包安裝
編譯Inception過程當中依賴一些包才能夠成功,依賴的包有以下5個:c++
bison:用來編譯語法文件(.yy)。yum收錄的是3.0.4,源碼編譯2.5,官方推薦2.6以前的,因此採用源碼編譯。 # wget http://ftp.gnu.org/gnu/bison/bison-2.5.tar.bz2 # tar xf bison-2.5.tar.bz2 # cd bison-2.5 # ./configure && make && make install cmake:版本最好用2.8.x # yum -y install cmake ncurses安裝 # yum -y install ncurses-devel 安裝g++ # yum -y install gcc gcc-c++ 安裝openssl # yum -y installopenssl-devel
編譯Inceptiongit
# cd /opt # mkdir -p /inception/{data,logs} # unzip inception-master.zip -d /inception # cd /inception/inception-master # cmake -DWITH_DEBUG=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/inception \ -DMYSQL_DATADIR=/inception/data \ -DWITH_SSL=bundled \ -DCMAKE_BUILD_TYPE=RELEASE \ -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
拷貝啓動文件github
# cp /inception/inception-master/sql/Inception /usr/local/bin/ # cp /inception/inception-master/sql/gen_lex_hash /usr/local/bin/
配置參數文件/etc/inc.cnfweb
# vi /etc/inc.cnf [inception] general_log=1 general_log_file=inception.log port=6669 socket=/tmp/inc.socket character-set-client-handshake=0 character-set-server=utf8 inception_remote_system_password=mysql inception_remote_system_user=wanbin inception_remote_backup_port=3307 inception_remote_backup_host=127.0.0.1 inception_support_charset=utf8mb4 inception_enable_nullable=1 inception_check_primary_key=1 inception_check_column_comment=0 inception_check_table_comment=1 inception_check_column_default_value=0 inception_max_char_length=30 inception_osc_min_table_size=1 inception_osc_bin_dir=/usr/local/toolkit/bin inception_osc_chunk_time=0.1 inception_enable_blob_type=1
詳細參數介紹sql
port=6669:Inception的服務端口 socket=/tmp/inc.socket:Inception的套接字文件存放位置 character-set-server=utf8:mysql原生參數 #Inception 審覈規則 inception_check_insert_field:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在插入語句中, 用來控制是否指定插入列列表,若是沒有指定,而且參數值爲ON,則會報錯。 inception_check_dml_where:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在審覈DML語句時, 若是發現沒有WHERE條件,而且此參數設置爲ON,就會報錯,不然被忽略 inception_check_dml_limit:參數可選範圍爲ON/OFF,參數默認值爲ON,功能說明是在DML語句中,若是使用了LIMIT表達式, 而且此參數設置爲ON,就會報錯。這通常用來防止STATEMENT語句主從複製時致使主從不一致的問題。 inception_check_dml_orderby:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在DML語句中,若是使用了OrderBy表達式, 而且此參數設置爲ON,就會報錯。這通常用來防止STATEMENT語句主從複製時致使主從不一致的問題。 inception_enable_select_star:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在遇到查詢語句爲「select*from」, 而且此參數設置爲ON時,不會報錯,不然會報錯。 inception_enable_orderby_rand:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是語句中出現orderbyrand()時, 用來控制是否報錯,設置爲ON表示不報錯,不然會報錯。 inception_enable_nullable:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建立或者新增列時,若是列爲NULL, 用來控制是否報錯,若是設置爲ON,表示不報錯,不然會報錯。 inception_enable_foreign_key:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建立表或增長索引時,若是存在外鍵, 用來控制是否報錯,若是設置爲ON,則不報錯,不然會報錯。 inception_max_key_parts:參數可選範圍爲1~64,參數默認值爲5,功能是在一個索引中,用來控制列的最大個數, 若是超過這個數目則報錯。在增長索引或新建表時,都會生效。 inception_max_update_rows:參數可選範圍爲1~MAX,參數默認值爲10000,功能是在一個修改語句中,用來控制預計影響的最大行數, 若是超過這個數就報錯。這個參數的獲取方法是explain,對於有一些語句或在MySQL5.5版本中獲取不到相應語句時,預計行數都會是0, 這時這個參數就失效了。 inception_max_keys:參數可選範圍爲1~1024,參數默認值爲16,功能在一個表中,用來控制支持的最大索引數目, 若是超過這個數則報錯,無論在新增表,仍是新增索引時,都有效。 inception_enable_not_innodb:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是在新建表指定的存儲引擎不是Innodb時, 用來控制是否報錯,若是設置爲ON,則不報錯,不然會報錯。 inception_support_charset:參數可選範圍爲MySQL支持字符集,參數默認值爲「utf8mb4」,功能是表示在建表或建庫時支持的字符集, 若是須要多個,則用逗號分隔,影響的範圍是建表、設置會話字符集、修改表字符集屬性等。 inception_check_table_comment:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表及沒有設置表註釋時,用來控制是否報錯,若是設置爲ON,則會報錯。 inception_check_column_comment:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表或改表加列,而且沒有設置列註釋時,用來控制是否報錯,若是設置爲ON,則會報錯。 inception_check_primary_key:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表時,若是沒有建立主鍵, 用來控制是否報錯,若是設置爲ON,就會報錯。 inception_enable_partition_table:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是在建表時, 若是建立了分區表,用來控制是否報錯,若是設置爲ON,不會報錯,不然會報錯。 inception_enable_enum_set_bit:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是在建表或加列時, 若是列對應的數據類型指定的是enum、set、bit數據類型,用來控制是否報錯,若是設置爲ON,則不報錯,不然會報錯。 inception_check_index_prefix:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是用來檢查新建或建表時的索引前綴, 普通索引的前綴爲「idx_」,惟一索引的前綴爲「uniq_」,若是設置爲ON,而且索引前綴不符合規則,則會報錯。 inception_enable_autoincrement_unsigned:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在新建表時, 若是自增列不是無符號整型的數據類型,用來控制是否報錯,若是設置爲ON,就報錯,不然不報錯。 inception_max_char_length:參數可選範圍爲1~MAX,參數默認值爲16,功能是用來控制當char類型的長度大於多少時, 就提示將其轉換爲VARCHAR。 inception_check_autoincrement_init_value:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是當建表時自增列的值指定不爲1時, 用來控制是否報錯,若是設置爲ON,則報錯。 inception_check_autoincrement_datatype:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表時自增列的類型不爲int或bigint時, 用來控制是否報錯,若是設置爲ON,則會報錯。 inception_check_timestamp_default:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表時,若是沒有爲timestamp類型指定默認值, 用來控制是否報錯,若是設置爲ON,則會報錯。 inception_enable_column_charset:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是在新建表或修改表加列改列時, 用來控制是否能單獨指定列的字符集,若是設置爲ON,則表示能夠設置,不報錯。 inception_check_autoincrement_name:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表時,若是指定的自增列名字不爲ID, 用來控制是否報錯,若是設置爲ON,則報錯,表示這個列可能存在業務意義,起到提示的做用。 inception_merge_alter_table:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在同一個Inception任務中,多個語句修改同一個表的語句出現時, 用來控制是否報錯,若是設置爲ON,則報錯,並提示合成一個。 inception_check_column_default_value:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表、修改列、新增列時, 用來控制新的列屬性是否要有默認值,若是設置爲ON,則說明必需要有默認值,不然會報錯。 inception_enable_blob_type:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是在建表、修改列、新增列操做時,若是存在BLOB類型的列, 用來控制是否報錯,若是設置爲ON,說明支持BLOB類型,則不會報錯。 inception_enable_identifer_keyword:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是在全部審覈的SQL語句中, 若是有標識符被寫成MySQL的關鍵字,用來控制是否報錯。若是設置爲ON,說明支持標識符爲關鍵字,就不會報錯,不然會報錯。 因爲歷史緣由,這裏的identifer寫錯了,正確寫法是identifier,但Inception發佈已久,只能將錯就錯。 auto_commit:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是爲了匹配Python客戶端每次自動設置auto_commit=0的, 若是取消則會報錯,針對Inception自己沒有實際意義。 bind_address:參數可選範圍爲string,參數默認值爲*。這個參數實際上就是MySQL數據庫原來的參數, 由於Incpetion沒有權限驗證過程,那麼爲了實現更安全的訪問,能夠給Inception服務器的這個參數設置某些機器(Inception上層的應用程序)的地址, 這樣其餘非法程序就是不可訪問的了,再加上Inception執行選項中的用戶名密碼,對於後端MySQL就更加安全了。 general_log:參數可選範圍爲ON/OFF,參數默認值爲ON。 這個參數就是原生的MySQL參數,用來記錄在Inception服務上執行過哪些語句,定位一些問題等。 general_log_file:參數可選範圍爲string,參數默認值爲inception.log,功能是設置generallog寫入的文件路徑。 inception_user:參數可選範圍爲string,參數默認值爲empty。這個用戶名在配置以後,在鏈接Inception的選項中能夠不指定user, 這樣就能夠不暴露線上數據庫的用戶名及密碼了,能夠做爲臨時使用的一種方式。 但這個用戶如今只能用來審覈,也就是說,即便在選項中指定--enable-execute,也不能執行,是隻能用來審覈的帳號。 inception_password:參數可選範圍爲string,參數默認值爲empty。這個參數與上面的參數是一對的,對應的是選項中的password,設置這個參數以後,能夠在選項中不指定password。 inception_enable_sql_statistic:參數可選範圍爲ON/OFF,參數默認值爲ON。 用來設置是否支持在統計Inception執行過的語句中,記錄各類語句分別佔多大比例。 若是參數值爲ON,則每次執行的狀況都會在備份數據庫實例中inception庫的statistic表中,以一條記錄的形式存儲此次操做的統計狀況, 每次操做對應一條記錄,這條記錄中含有的信息是各類類型的語句執行次數狀況, 具體的信息請參照52章中「Inception對SQL執行狀況的統計」一節。 inception_read_only:參數可選範圍爲ON/OFF,參數默認值爲OFF。 設置當前Inception服務器是否爲只讀,這是爲了防止一些人在具備修改權限的帳號時,經過Inception誤修改一些數據。 若是inception_read_only設置爲ON,則即便打開了enable-execute,同時又有執行權限,也不會去執行,審覈完成即返回。 inception_check_identifier:參數可選範圍爲ON/OFF,參數默認值爲ON,功能是打開與關閉Inception對SQL語句中各類名字的檢查。 若是設置爲ON,則發現名字中存在除數字、字母、下劃線以外的字符時,會報Identifier「invalidname」isinvalid,validoptions:[a-z,A-Z,0-9,_]。 inception_max_primary_key_parts:參數可選範圍爲1~64,參數默認值爲5,功能是在建立表時,若是主鍵所包含的列個數超過這個設置的值,則會報警告。 inception_enable_pk_columns_only_int:參數可選範圍爲ON/OFF,參數默認值爲OFF,功能是若是參數設置爲ON,則在建立表或建立主鍵索引時,會判斷包含的列的類型是否只有INT類型的,若是不是則報警告。 #備份服務器信息,注意改爲你的機器.用於回滾。 inception_remote_backup_host:指定遠程備份MySQL實例的地址。 inception_remote_backup_port:指定遠程備份MySQL實例的端口。 inception_remote_system_user:備份時,鏈接上面指定的MySQL實例時所須要的用戶名,這個用戶須要有相應的權限,通常包括CREATE、INSERT及SELECT權限。 inception_remote_system_password:備份時,鏈接備份庫時所須要的用戶對應的密碼。 #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
啓動Inceptiondocker
# Inception --defaults-file=/etc/inc.cnf & # mysql -h127.0.0.1 -uroot -P6669 1 [(none)] 10:53:26>inception get variables; +------------------------------------------+---------------------------------------------+ | Variable_name | Value | +------------------------------------------+---------------------------------------------+ | autocommit | OFF | | bind_address | * | | character_set_system | utf8 | | character_sets_dir | /inception/inception-master/share/charsets/ | | connect_timeout | 10 | | date_format | %Y-%m-%d | | datetime_format | %Y-%m-%d %H:%i:%s | | general_log | ON | | general_log_file | inception.log | | inception_check_autoincrement_datatype | ON | | inception_check_autoincrement_init_value | ON | | inception_check_autoincrement_name | ON | | inception_check_column_comment | OFF | | inception_check_column_default_value | OFF | | inception_check_dml_limit | ON | | inception_check_dml_orderby | ON | | inception_check_dml_where | ON | | inception_check_identifier | ON | | inception_check_index_prefix | ON | | inception_check_insert_field | ON | | inception_check_primary_key | ON | | inception_check_table_comment | ON | | inception_check_timestamp_default | ON | | inception_ddl_support | OFF | | inception_enable_autoincrement_unsigned | ON | | inception_enable_blob_type | ON | | inception_enable_column_charset | OFF | | inception_enable_enum_set_bit | OFF | | inception_enable_foreign_key | OFF | | inception_enable_identifer_keyword | OFF | | inception_enable_not_innodb | OFF | | inception_enable_nullable | ON | | inception_enable_orderby_rand | OFF | | inception_enable_partition_table | OFF | | inception_enable_pk_columns_only_int | OFF | | inception_enable_select_star | OFF | | inception_enable_sql_statistic | ON | | inception_max_char_length | 30 | | inception_max_key_parts | 5 | | inception_max_keys | 16 | | inception_max_primary_key_parts | 5 | | inception_max_update_rows | 10000 | | inception_merge_alter_table | ON | | inception_osc_alter_foreign_keys_method | none | | inception_osc_bin_dir | /usr/local/toolkit/bin | | inception_osc_check_alter | ON | | inception_osc_check_interval | 5.000000 | | inception_osc_check_replication_filters | ON | | inception_osc_chunk_size | 1000 | | inception_osc_chunk_size_limit | 4.000000 | | inception_osc_chunk_time | 0.100000 | | inception_osc_critical_thread_connected | 1000 | | inception_osc_critical_thread_running | 80 | | inception_osc_drop_new_table | ON | | inception_osc_drop_old_table | ON | | inception_osc_max_lag | 3.000000 | | inception_osc_max_thread_connected | 1000 | | inception_osc_max_thread_running | 80 | | inception_osc_min_table_size | 1 | | inception_osc_on | ON | | inception_osc_print_none | ON | | inception_osc_print_sql | ON | | inception_osc_recursion_method | processlist | | inception_password | | | inception_read_only | OFF | | inception_remote_backup_host | 127.0.0.1 | | inception_remote_backup_port | 3307 | | inception_remote_system_password | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA | | inception_remote_system_user | wanbin | | inception_support_charset | utf8mb4 | | inception_user | | | interactive_timeout | 28800 | | max_allowed_packet | 1073741824 | | max_connect_errors | 100 | | max_connections | 151 | | net_buffer_length | 16384 | | net_read_timeout | 30 | | net_write_timeout | 60 | | port | 6669 | | query_alloc_block_size | 8192 | | query_prealloc_size | 8192 | | socket | /tmp/inc.socket | | thread_handling | one-thread-per-connection | | thread_stack | 262144 | | time_format | %H:%i:%s | | version | Inception2.1.50 | | version_comment | Source distribution | | version_compile_machine | x86_64 | | version_compile_os | Linux | | wait_timeout | 28800 | +------------------------------------------+---------------------------------------------+ 90 rows in set (0.00 sec)
Yearning 開源的MYSQL SQL語句審覈平臺,提供數據庫字典查詢,查詢審計,SQL審覈等多種功能。
Yearning 的文檔地址:https://supermancookie.com/Yearning-document/
Yearning 是基於Inception的web可視化SQL審覈平臺,其自己只提供可視化交互頁面並不具有sql審覈的能力。
從v1.3.0版本開始將採起docker運行的方式,再也不提供普通安裝教程
docker-compose安裝
# sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # sudo chmod +x /usr/local/bin/docker-compose # docker-compose --version docker-compose version 1.22.0, build f46880fe
docker安裝
參考CentOS Docker 安裝
# service docker start
Yearning安裝
# git clone https://github.com/cookieY/Yearning.git # cd /opt/Yearning-master/install/yearning-docker-compose # vim docker-compose.yml 把8080:80 改爲 80:80 # docker-compose up -d
請注意本地不要佔用8080和8000端口 如須要更改端口可再docker-compose.yml文件中更改,3306和8000端口不可更改!docker-compose並不能肯定容器的依賴關係,因此若是執行後沒法登錄,請使用docker-compose restart yearning
重啓容器
cd /opt/Yearning-master/install/yearning-docker-compose docker-compose down 或者 docker-compose stop yearning #中止yearning服務 docker-compose stop db #中止mysql服務 cd /opt/Yearning-master/install/yearning-docker-compose docker-compose up -d 或者 docker-compose start yearning #啓動yearning服務 docker-compose start db #啓動mysql服務
默認用戶:admin
默認密碼: Yearning_admin
使用外部mysql
docker-compose中已經包含了mysql且掛載本地目錄,不存在容器銷燬數據消失的問題,但若是你仍是想使用外部mysql,可以使用如下步驟:
#新建Yearning庫,設置字符集爲UTF-8, 而後在Yearning庫中導入sql文件 # cd /opt/Yearning-master/install/yearning-docker-compose/init-sql mysql> create database Yearning DEFAULT CHARACTER SET utf8mb4; mysql>use Yearning mysql>source install.sql # docker run -d -e HOST=192.168.56.210 \ -e MYSQL_ADDR=192.168.56.210 \ -e MYSQL_USER=wanbin \ -e MYSQL_PASSWORD=mysql \ -p80:80 -p8000:8000 registry.cn-hangzhou.aliyuncs.com/cookie/yearning:v1.3.2
登錄後請經過設置頁面設置inception及其餘配置信息
參考官檔:https://supermancookie.com/Yearning-document/install/
啓動
#啓動nginx systemctl start nginx #啓動Inception Inception --defaults-file=/etc/inc.cnf & #啓動yearning cd /opt/Yearning-1.2.0/src/ gunicorn settingConf.wsgi:application -c gunicorn.conf # ps -ef|grep gun root 26174 1 2 13:56 ? 00:00:00 /usr/local/bin/python3.6 /usr/local/bin/gunicorn settingConf.wsgi:application -c gunicorn.conf root 26181 26174 17 13:56 ? 00:00:00 /usr/local/bin/python3.6 /usr/local/bin/gunicorn settingConf.wsgi:application -c gunicorn.conf root 26182 26174 15 13:56 ? 00:00:00 /usr/local/bin/python3.6 /usr/local/bin/gunicorn settingConf.wsgi:application -c gunicorn.conf root 26189 1925 0 13:57 pts/0 00:00:00 grep --color=auto gun
表明啓動成功