部署MySQL自動化運維工具inception+archer

  

***************************************************************************
部署MySQL自動化運維工具inception+archer 2018年03月28日 leo
***************************************************************************html

 

服務器
***************************************************************************
10.10.3.70node

--配置工程師及審覈人
http://10.10.3.70:8080/admin/sql/users/python

--配置主庫地址
http://10.10.3.70:8080/admin/sql/master_configmysql

--主頁
http://10.10.3.70:8080/login/linux

--用戶
admin 123456
dba 123456c++

 

 

安裝inception
***************************************************************************
--安裝inception工具
yum -y install cmake bison ncurses-devel gcc gcc-c++ openssl-devel
cd /opt
wget https://github.com/mysql-inception/inception/archive/master.zip
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"
make && make install git

--編輯參數文件
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 #表示在建表或者建庫時支持的字符集,若是須要多個,則用逗號分隔,影響的範圍是建表、設置會話字符集、修改表字符集屬性等github

--啓動
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的全部參數web

 


刪除python
***************************************************************************
--刪除現有Python
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##強制刪除已安裝程序及其關聯
whereis python |xargs rm -frv ##刪除全部殘餘文件 ##xargs,容許你對輸出執行其餘某些命令
whereis python ##驗證刪除,返回無結果sql

--刪除現有的yum
rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps
whereis yum |xargs rm -frv

 

 

archer安裝部署
***************************************************************************
--版本
python:3.4
django:1.8
mysql : 5.6以上
linux : 64位linux

--安裝archer
mkdir -p /opt/archer_web/
cd /opt/archer_web
yum -y install git
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
cd /opt
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
cd /opt
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
cd /opt
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
>>> import django
>>> 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
cd /opt/archer_web/archer

--建立archer DB和inception DB
--進入安裝的mysql5.6
mysql -uroot -p'P@ssw0rd' -S /mydata/mysql/mysql3306/mysql.sock
--grant all privileges on *.* to root@'%' identified by 'P@ssw0rd';
create database archer default character set utf8;
grant all on archer.* to archer_rw@'%' identified by 'P@ssw0rd';
create database inception_db default character set utf8;
grant all on inception_db.* to incep_rw@'%' identified by 'P@ssw0rd';
grant select,create,insert on *.* to incep_rw@'%' identified by 'P@ssw0rd';
create database test default character set utf8; #測試庫 建在審覈庫裏了 僅作測試
grant all on test.* to test@'%' identified by 'P@ssw0rd';
flush privileges;


--修改/opt/archer_web/archer/archer/settings.py,以下內容:
vi /opt/archer_web/archer/archer/settings.py
#該項目自己的mysql數據庫地址
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'archer',
'USER': 'archer_rw',
'PASSWORD': 'P@ssw0rd',
'HOST': '127.0.0.1',
'PORT': '3306'
}
}
#inception組件所在的地址
INCEPTION_HOST = '10.10.3.70'
INCEPTION_PORT = '6669'
#查看回滾SQL時候會用到,這裏要告訴archer去哪一個mysql裏讀取inception備份的回滾信息和SQL.
#注意這裏要和inception組件的inception.conf裏的inception_remote_XX部分保持一致.
INCEPTION_REMOTE_BACKUP_HOST='10.10.3.70'
INCEPTION_REMOTE_BACKUP_PORT=3306
INCEPTION_REMOTE_BACKUP_USER='incep_rw'
INCEPTION_REMOTE_BACKUP_PASSWORD='P@ssw0rd' 這個用戶就是在部署inception使用的用戶。(這用戶應該是和上面建立的incep_rw是一個用戶,能夠不用建立incep_rw)

--經過model建立archer自己的數據庫表
cd /opt/archer_web/archer
pip3 install django_admin_bootstrapped
python3 manage.py makemigrations
python3 manage.py makemigrations sql
python3 manage.py migrate
進入數據庫查看archer庫下的表是否存在

--建立django admin管理員
python3 manage.py createsuperuser
Username: admin 本身填寫用戶名
Email address: 郵箱
Password: 密碼
Password (again): 確認密碼
Superuser created successfully.
該用戶能夠登陸django admin來管理model。

--啓動acher
vi debug.sh
#!/bin/bash
python3 manage.py runserver 10.10.3.70:9123 端口爲9123 此處改成8080了
nohup sh debug.sh 2&>1 &

--建立archer系統登陸用戶
pip3 install simplejson
經過瀏覽器訪問http://10.10.3.70:8080/admin/sql/users/
能夠看到django登陸界面:
使用上面建立的用戶名密碼(admin/和密碼)登陸:
點擊右側Add用戶配置,用戶名密碼自定義,至少建立一個工程師和一個審覈人(用admin用戶能夠登陸)後續新的工程師和審覈人用戶請用LDAP導入sql_users表或django admin增長

--配置主庫地址
經過瀏覽器訪問http://10.10.3.70:8080/admin/sql/master_config
點擊右側Add master_config。這一步是爲了告訴archer你要用inception去哪些mysql主庫裏執行SQL,所用到的用戶名密碼、端口等。


--正式訪問主頁
http://10.10.3.70:8080/login/
發起腳本如:
use mysql;
create table t (id int(10));
insert into t values(1);
insert into t values(2);
commit;
select * from t;
如報錯:/opt/python3/lib/python3.4/site-packages/pymysql/connections.py in _request_authentication, line 1113
解決辦法:
vi /opt/python3/lib/python3.4/site-packages/pymysql/connections.py
... ...
def _request_authentication(self):
# https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse
self.server_version = '5.6.24-72.2-log' #添加此行
if int(self.server_version.split('.', 1)[0]) >= 5:
... ...

若是遇到rollback的問題,就是給權限的問題,inception配置的鏈接的數據庫的用戶的權限,在
grant select,create,insert on *.* to incep_rw@'%' identified by 'P@ssw0rd';
也就是我配置的admin的用戶。

inception源碼地址:https://github.com/mysql-inception/inceptionarcher 源碼地址:https://github.com/jly8866/archer

相關文章
相關標籤/搜索