您好,登錄后才能下訂單哦!
#yum install cmake bison ncurses-devel gcc gcc-c++ openssl-devel
下載,解壓 wget https://github.com/mysql-inception/inception/archive/master.zip
# mkdir /usr/local/inception 安裝目錄
# mkdir /inception
# mkdir {data,logs}
# cd inception-master
# cmake .
# cmake -DWITH_DEBUG=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/inception -DMYSQL_DATADIR=/data/inception -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=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=/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=1 #一個全局的OSC開關,默認是打開的,如果想要關閉則設置為OFF,這樣就會直接修改
inception_osc_print_none=1 #用來設置在Inception返回結果集中,對于原來OSC在執行過程的標準輸出信息是不是要打印到結果集對應的錯誤信息列中,如果設置為1,就不打印,如果設置為0,就打印。而如果出現錯誤了,則都會打印
inception_osc_print_sql=1 #對應參數--print
#備份服務器信息,注意改成你的機器
inception_remote_system_password=123456
inception_remote_system_user=root
inception_remote_backup_port=3306
inception_remote_backup_host=192.168.99.205
inception_support_charset=utf8 #表示在建表或者建庫時支持的字符集,如果需要多個,則用逗號分隔,影響的范圍是建表、設置會話字符集、修改表字符集屬性等
啟動
# nohup /usr/local/inception/bin/Inception --defaults-file=/etc/inc.cnf &
# netstat -tulpn | grep 6669 //inception的默認端口是6669
# cd /usr/local/inception/bin/
# ./mysql -uroot -h227.0.0.1 -P6669 //聯接inception,和mysql一樣的方式
# inception get variables; //查看inception的所有參數
目前inception支持python、c、c++接口。
# vim aaa.py
#!/usr/bin/python
#-*- coding: utf-8 -*-
import MySQLdb
sql='/*--user=user;--password=pass;--host=x.x.x.x;--port=3306;--execute=1;*/\ #這里的都是你的mysql的地址和用戶
inception_magic_start;\
use optest;\
CREATE TABLE xxx(id int unsigned not null auto_increment comment "aaaa",username varchar(10) not null default 0 comment "xxx",primary key(id))engine = innodb charset=utf8 comment "dddd";\
inception_magic_commit;'
#insert into adaptive_office(username) values("ASD"),("ZXC"),("EST");
try:
conn=MySQLdb.connect(host='127.0.0.1',user='admin',passwd='123456',db='',port=6669) #這里的是備份數據庫的的(我的inception和mysql安裝在一個機器上了)
cursor=conn.cursor()
cursor.execute(sql)
results = cursor.fetchall()
column_name_max_size=max(len(i[0]) for i in cursor.description)
row_num=0
for result in results:
row_num=row_num+1
print '*'.ljust(27,'*'),row_num,'.row', '*'.ljust(27,'*')
row = map(lambda x, y: (x,y), (i[0] for i in cursor.description), result)
for each_column in row:
if each_column[0] != 'errormessage':
print each_column[0].rjust(column_name_max_size),":",each_column[1]
else:
print each_column[0].rjust(column_name_max_size),':',each_column[1].replace('\n','\n'.ljust(column_name_max_size+4))
cursor.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
************************** INCEPTION_WEB ***************************
升級python到2.7
# wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz --no-check-certificate
# tar -xvf Python-2.7.10.tar
# cd Python-2.7.10
# ./configure && make && make install
# /usr/local/bin/python -V
# mv /usr/bin/python /usr/bin/python2.6.6
# ln -s /usr/local/bin/python /usr/bin/python
# python -V //驗證版本
# vim /usr/bin/yum
修改#!/usr/bin/python 為#!/usr/bin/python2.6.6,因為yum安裝依賴的是2.6版本的python
安裝模塊
# yum -y install python-pip //這種安裝處理是2.6版本的
# wget https://bootstrap.pypa.io/ez_setup.py --no-check-certificate //下載一個ez_setup 安裝pip2.7版本的
# python2.7 ez_setup.py
# easy_install-2.7 pip
# pip2.7 install MySQL-python
# yum install mysql-devel //如果報錯看看是不是缺失mysql-devel包。在重新裝MySQL-python
# pip2.7 install flask_wtf
# pip2.7 install flask-script
# pip2.7 install flask-debugtoolbar
安裝
# unzip inception_web-master.zip
# cd inception_web-master/app
# vim inception.py //修改配置文件,注意下邊的配置的主機和密碼。
#coding=utf-8
import MySQLdb
def table_structure(mysql_structure):
sql1='/*--user=root;--password=123456;--host=127.0.0.1;--execute=1;--port=3306;*/\ #####實際數據庫的
inception_magic_start;\
use mysql;'
sql2='inception_magic_commit;'
sql = sql1 + mysql_structure + sql2
try:
conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='',db='',port=6669,use_unicode=True, charset="utf8") ####備份數據庫的
cur=conn.cursor()
ret=cur.execute(sql)
result=cur.fetchall()
num_fields = len(cur.description)
field_names = [i[0] for i in cur.description]
print field_names
for row in result:
print row[0], "|",row[1],"|",row[2],"|",row[3],"|",row[4],"|",row[5],"|",row[6],"|",row[7],"|",row[8],"|",row[9],"|",row[10]
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
return result[1][4].split("\n")
啟動
./run.py runserver --host 0.0.0.0 &
輸入ip:5000
這個界面已經好久不更新了,而且也只能做sql審核,不能做別的。
***************************************************************archer安裝部署*****************************************************
版本
python:3.4
django:1.8
mysql : 5.6以上
linux : 64位linux
# mkdir /op/archer_web/
# cd /opt/archer_web
# git clone https://github.com/jly8866/archer.git
安裝python3
# cd /opt
# wget https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz
# tar -zxvf Python-3.4.1.tgz
# cd Python-3.4.1
# ./configure --prefix=/opt/python3 && make && make install
# vim /etc/profile
添加:export PATH="/opt/python3/bin:$PATH"
# source /etc/profile
# python3
安裝setuptools
# wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
# tar -zxvf setuptools-19.6.tar.gz
# cd setuptools-19.6
# python3 setup.py build
# python3 setup.py install
可以看到安裝到python3下面了
安裝pip
# wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
# tar -zxvf pip-8.0.2.tar.gz
# cd pip-8.0.2
# python3 setup.py build
# python3 setup.py install
安裝Django
# wget https://pypi.python.org/packages/44/41/bf93934082e9897a56a591a67bacbd9fb74e71244f3f42253432a9e627e6/Django-1.8.17.tar.gz#md5=e76842cdfbcb31286bd44f51e087a04c
# tar -zxvf Django-1.8.17.tar.gz
# cd Django-1.8.17
# python3 setup.py install
# python3
Python 3.4.1 (default, Apr 15 2017, 14:11:11)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> django.VERSION
(1, 8, 17, 'final', 0)
>>> exit()
安裝Crypto和pymysql
# pip3 install Crypto
# pip3 install pycrypto
# pip3 install pymysql
這里遇到了錯誤
# pip3 install Crypto
-bash: ./pip3: /usr/bin/python3: bad interpreter: No such file or directory
解決方法:
python3.4 -m pip install Crypto
或者
vim /opt/python3/bin/pip3
將#!/usr/bin/python3改為#!/opt/python3/bin/python3.4
# vim /opt/python3/lib/python3.4/site-packages/pymysql/connections.py
在if int(self.server_version.split(‘.’, 1)[0]) >= 5: 這一行之前加上以下這一句并保存,記得別用tab鍵用4個空格縮進:
self.server_version = '5.6.24-72.2-log'
配置archer
1、
# cd /opt/archef_web/archer
# ls
archer debug.bat debug.sh docs LICENSE manage.py nohup.out README.md requirements.txt screenshots sql startup.sh stop.sh
# pip3 install -r requirements.txt
2、創建archer DB和inception DB
進入安裝的mysql5.6
create database archer default character set utf8;
grant all on archer.* to archer_rw@'%' identified by 'xxx';
create database inception_db default character set utf8;
grant all on inception_db.* to incep_rw@'%' identified by 'xxx';
flush privileges;
3、修改/opt/archef_web/archer/archer/settings.py,如下內容:
#該項目本身的mysql數據庫地址
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'archer',
'USER': 'archer_rw',
'PASSWORD': 'xxx',
'HOST': '192.168.1.3',
'PORT': '3306'
}
}
#inception組件所在的地址
INCEPTION_HOST = '192.168.1.123'
INCEPTION_PORT = '6669'
#查看回滾SQL時候會用到,這里要告訴archer去哪個mysql里讀取inception備份的回滾信息和SQL.
#注意這里要和inception組件的inception.conf里的inception_remote_XX部分保持一致.
INCEPTION_REMOTE_BACKUP_HOST='192.168.1.3'
INCEPTION_REMOTE_BACKUP_PORT=3306
INCEPTION_REMOTE_BACKUP_USER='admin'
INCEPTION_REMOTE_BACKUP_PASSWORD='XXX' 這個用戶就是在部署inception使用的用戶。(這用戶應該是和上面創建的incep_rw是一個用戶,可以不用創建incep_rw)
4、通過model創建archer本身的數據庫表
# cd /opt/archef_web/archer
# python3 manage.py makemigrations 或者 python3 manage.py makemigrations sql
Migrations for 'sql':
0001_initial.py:
- Create model users
- Create model master_config
- Create model workflow
# python3 manage.py migrate
Operations to perform:
Synchronize unmigrated apps: messages, staticfiles
Apply all migrations: sessions, auth, contenttypes, sql, admin
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying sql.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
進入數據庫查看archer庫下的表是否存在
5、創建django admin管理員
# python3 manage.py createsuperuser
Username: admin 自己填寫用戶名
Email address: 郵箱
Password: 密碼
Password (again): 確認密碼
Superuser created successfully.
該用戶可以登錄django admin來管理model。
6、啟動acher
# vi debug.sh
#!/bin/bash
python3 manage.py runserver 0.0.0.0:9123 端口為9123
#sh debug.sh 或者 nohup sh debug.sh 2&>1 &
Performing system checks...
System check identified no issues (0 silenced).
April 15, 2017 - 16:39:11
Django version 1.8.17, using settings 'archer.settings'
Starting development server at http://0.0.0.0:9123/
Quit the server with CONTROL-C.
創建 archer 系統登錄用戶
通過瀏覽器訪問
http://archer部署機器的ip:9123/admin/sql/users/
可以看到django登錄界面:
使用上面第5步創建的用戶名密碼(admin/和密碼)登錄:
點擊右側Add用戶配置,用戶名密碼自定義,至少創建一個工程師和一個審核人(用admin用戶可以登錄)后續新的工程師和審核人用戶請用LDAP導入sql_users表或django admin增加
登陸成功后
如果遇到rollback的問題,就是給權限的問題,inception配置的連接的數據庫的用戶的權限,在
grant select,create,insert on *.* to incep_rw@'%' identified by 'XXX';
也就是我配置的admin的用戶。
inception源碼地址:https://github.com/mysql-inception/inception
archer 源碼地址:https://github.com/jly8866/archer
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。