自动化运维工具inception+archer
#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增加
配置主库地址
通过浏览器访问 http://192.168.1.123:9123/admin/sql/master_config
点击右侧Add master_config。这一步是为了告诉archer你要用inception去哪些mysql主库里执行SQL,所用到的用户名密码、端口等。
正式访问主页
http://192.168.1.123:9123/login/
登陆成功后
如果遇到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
文章题目:自动化运维工具inception+archer
本文地址:http://azwzsj.com/article/ghpsjo.html