Inception安装

  前言:

  MySQL语句需要审核,这一点每个DBA及开发人员都懂,但介于语句及环境的复杂性,大部分人都是望而却步,对其都是采取妥协的态度,从而每个公司都有自己的方法。 大多数公司基本都是半自动化(脚本+人工)及人肉法,耗尽大多数DBA的日常时间,

让时间碎片化,也是最让人头疼的事。

  Inception是一款自动化运维的利器,有别与现在各个公司使用的方式,使用Inception,将会给DBA带来最大的便利性,将DBA从繁冗的工作中解放出来,做一些更多的自动化工作,或者从架构方面研究如何更大程度的保证数据库的高可用等等。

  其实最让我感同身受的就是以下文档中的一部分话:(文档地址:http://mysql-inception.github.io/inception-document/)

  

  在MySQL审核方法中,有一种方法是最传统,门槛最低,同时也是与半自动化方法共存的一种方法,那就是人肉法,所谓“人肉法”,就是所有的审核工作都是由人工来完成,下面先看看一般的人工审核的工作方式图: 

  这种方法的交流方式一般是邮件,需要执行变更时,DEV/QA写邮件向DBA发起变更,在DBA收到之后,用“火眼金睛”目测他们写的SQL是不是有问题,这里的问题要包括下面几个方面:

  • 语法错误:这些错误其实真是难为我们DBA了,即使我们都是“火眼金睛”,那还是看不出来,终究不是机器人啊,比如经常有开发没有经过测试就发给DBA,会丢失分号,或者“`”写为“'”,这可真看不出来,只有真正到线上实践后,才会发现错误。
  • 语义错误:这种错误,需要DBA时刻要到线上把表结构、数据量等拿出来,然后再与SQL语句中用到的对象比对,看看SQL语句中用到的列、表、库等是不是正确,那么此时也是需要DBA的高超的目测能力(也就是我们熟知的找茬能力)的,想想在一个列名中多一个字母或者少一个字母或者空格,这能看得出来么?我想未必。
  • 规则错误:我们对MySQL的SQL语句进行审核的目的就是想让SQL语句尽可能的统一,尽可能的减少错误,尽可能的优化SQL性能,尽可能的提高DBA运维效率,实际上,DBA定义了越多的规则,DBA越累,因为对所有的SQL语句,都要与我们的规则比对,找到不符合规则的语句及问题,那么这有点类似一个成语叫“作茧自缚”。DBA在每次拿到SQL语句后,心中都要遍历好多遍的“规则宝典”,在审核一个大项目之后,DBA长时间的高Load运算导致精疲力尽,同时又花了大半天的时间,也就是说DBA的大部分时间都花在了审核上面,这效率太低了,DBA的产出也太低了(但这些问题又不能不做啊)。
  • 循环审核:DBA在辛辛苦苦的找到力所能找到的错误之后,发邮件给DEV,总算能休息一会儿了,同时希望这是倒数第二次审核(因为DEV再回邮件之后,一审核,哇,都改了并且没有新问题,这多好啊,所以谓之倒数第二次审核),但经常是事与愿违,这么好的DEV能有几个啊,叮咚,邮件回过来了,说一句能改的都改好了(哎,我能知道哪些是不能改的么?),DBA需要带着之前审核出来的结果,看这些有没有改好,一个个比对(不管改好没改好,都要看一遍,因为DBA也不知道他改了哪些),实际上做的是又一次完全审核,因为这存在两方面工作,一方面是审核之前提出来的问题有没有改好,第二方面是在改的过程中,有没有引入新的问题。从上面的过程可以知道,DBA在这方面的工作量是非常大的,工作时间也基本都花在这上面,效率低下。
  • 主观性:对于已经定义的规则,虽然明明白白写在那里,但不同的DBA对同一条规则的理解其实是不同的,所以存在宽松不均的问题,同一个开发,面对不同DBA时,有时很轻松的通过,但有时又是铁律,搞得DEV/QA摸不着头脑,最终导致规则不成规则,很难推行下去。
  • 执行前检查:在上面久经折腾之后,好不容易审核通过了,可以执行了,那现在DBA需要做的事情是先对线上环境做一次检查,比如DEV写得IP是读库的虚IP还是写库的,执行语句时对线上的影响多大,对于DML语句,如果影响行数太多,可能还需要拆开再去执行,而如果是DDL,可能需要考虑晚上再去执行,或者用OSC(pt-online-schema-change)工具来执行等等。这些问题确定之后,再考虑开始执行。
  • 执行前备份:备份是必要的,因为语句在没有执行时,都是想不到他有影响会有多大,一般是不需要,而需要时,才知道备份是多么的重要,这也正是应了一句谚语:“书到用时方恨少;事非经过不知难。”,但这个工作也很是让人为难,应该备份全表呢?还是把影响的查出来备份呢?DBA在这个时候肯定是很不愿意这样做,但万一出问题怎么办?都懂得,不说了。
  • 执行出错:终于到执行阶段了,可是万万没想到,执行出错了,比较多的是语法/语义错误,此时可能要与DEV沟通,为什么发起时没有测试,通常他们会告诉你,测试过了,但贴到邮件时贴错了,此时DBA可能需要手动一个一个把出现错误的地方修改过来再执行,而需要注意的是,出现之前的那些语句已经执行完了,需要把那些语句去掉,而如果这样的问题在一次执行中出现多次的话,执行过程也会耗费掉不少时间。
  • 执行后检查:这个工作一般就是DEV/QA的事情了,DBA在执行完后,通知执行完成,并做检查,之后DBA的事情是等待(类似信号等待),或者可以切换到其它线程去处理其它数据变更请求。当DEV/QA告诉你检查没事儿了,这个事儿才算结束。

  一个DBA一天的时间往往都被这些不想做而必须要去做的事情困扰着,同时DB组还发现人力根本不够,还需要招人(难道招人来了还是去干这些事情么?),DBA难道就是只干这些事情的人么?不是!!!

 

  好了,以上各位看官可以忽略。下面正式安装Inception:

1、下载

https://github.com/mysql-inception/inception   download zip

2、安装依赖

yum -y install gcc gcc-c++ cmake bison openssl-devel ncurses-devel  mysql-devel 

3、安装

unzip inception-master.zip
cd inception-master
./inception_build.sh debug [Xcode]  #[Xcode] 指定平台 默认linux

  

4、编辑配置文件

vim /etc/inc.cnf

[inception]
general_log=1
general_log_file=inc.log
port=6669
socket=/tmp/inc.socket
character-set-client-handshake=0
character-set-server=utf8
inception_remote_system_password=admin
inception_remote_system_user=myadmin
inception_remote_backup_port=3308
inception_remote_backup_host=127.0.0.1
inception_support_charset=utf8
inception_enable_nullable=0
inception_check_primary_key=1
inception_check_column_comment=1
inception_check_table_comment=1
inception_osc_min_table_size=1
inception_osc_bin_dir=/usr/bin
inception_osc_chunk_time=0.1
inception_ddl_support=1
inception_enable_blob_type=1
inception_check_column_default_value=1
#手册说明参数意义http://mysql-inception.github.io/inception-document/

 

4、启动服务

/etc/dbbin/inception-master/debug/mysql/bin/Inception --defaults-file=/etc/inc.cnf &

5、登录

mysql –h127.0.0.1 –P6669 –uroot 
 inception get variables;

6、inception_web安装

环境python2.7+flask
源码地址:https://github.com/dbalihui/inception_web
#一般系统环境是2.6 需要先升级python环境 安装完注意修改vim `which yum` 把#!/usr/bin/python替换成#!/usr/bin/python2.6,否则可能造成yum失效。(yum依赖2.6版本python)

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 flask_wtf
pip2.7 install flask-script
pip2.7 install flask-debugtoolbar
pip2.7 install MySQL-python



7、修改配置文件

unzip inception_web-master.zip
cd inception_web-master/app
 vim inception.py
修改账号、密码及数据库名为自己测试环境名。

8、启动

./run.py runserver --host 0.0.0.0

浏览器IP+5000端口

 

  安装成功, 后续使用过程中需要什么自己开发功能向框架里添加就ok了。不想自己写可以使用git上的archer。

 

posted @ 2017-05-10 17:47  Bourne.D  阅读(319)  评论(0编辑  收藏  举报