前言:

  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。

Inception安装的更多相关文章

  1. inception安装步骤---自己整理的安装步骤

    inception安装步骤---自己整理的安装步骤2015-09-18 15:51 6185人阅读 评论(1) 收藏 举报 分类: inception相关版权声明:本文为博主原创文章,未经博主允许不得 ...

  2. inception安装使用

    一个集审核.执行.备份及生成回滚语句于一身的MySQL自动化运维工具,由去哪网开源 安装 CentOS 7 Python 3.6 安装基础环境 yum -y install cmake libncur ...

  3. MYSQL SQL 审核工具 (inception安装步骤)

    http://blog.csdn.net/wulantian/article/category/5825391

  4. Inception体验之安装

    Inception介绍 MySQL Inception是数据库管理员的工具.它允许DBA构建好的SQL语句,在只读数据集上测试它们,并最终针对生产数据库运行这些SQL语句,并且能够在SQL语句出于某种 ...

  5. centos 7 安装sql 审核工具 inception + archer

    系统环境: Centos7 + python2.7 + python3 .... 下载 源码地址:https://github.com/mysql-inception/inception Incept ...

  6. Inception使用详解

    一.Inception简介一款用于MySQL语句的审核的开源工具,不但具备自动化审核功能,同时还具备执行.生成对影响数据的回滚语句功能. 基本架构: 二.Inception安装 1.软件下载 下载链接 ...

  7. MySQL数据库Inception工具学习与测试 笔记

    MySQL语句的审核,在业界都已经基本被认同了,实际上也是对MySQL语句写法的统一化,标准化,而之前的人工审核,针对标准这个问题其实是很吃力的,标准越多,DBA越累,开发也越累. 那么在这个都追求自 ...

  8. Inception介绍(MySQL自动化运维工具)

    Inception介绍 GitHub:https://github.com/mysql-inception/inception 文档:https://mysql-inception.github.io ...

  9. 部署MySQL自动化运维工具inception+archer

    ***************************************************************************部署MySQL自动化运维工具inception+a ...

随机推荐

  1. XE7/10诡异报错brcc32错误

    重新编译工程时,报错:     之前没遇到过,解决方法: 重新设置下Application Icon,再build,问题解决.

  2. 深入理解java虚拟机-第六章

    第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 ...

  3. static才是对代码的提升

    static才是对代码的提升 static的作用有如下三条: 1):隐藏. 当编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性. 一个是a.c,另一个是main.c. 下面是a ...

  4. CodeForces - 622F:The Sum of the k-th Powers (拉格朗日插值法求自然数幂和)

    There are well-known formulas: , , . Also mathematicians found similar formulas for higher degrees. ...

  5. 如何制作CDLinux启动盘

    用笔记本安装虚拟机并且尝试使用CDLinux系统进行无线密码破解的朋友们可能会遇到很多的问题,今天的经验就是总结了很多的失败然后整理出来的,希望能够对大家有所帮助.本次经验来和大家分享一下使用U盘制作 ...

  6. RabbitMQ学习系列一安装RabbitMQ服务

    RabbitMQ学习系列一:windows下安装RabbitMQ服务 http://www.80iter.com/blog/1437026462550244 Rabbit MQ 是建立在强大的Erla ...

  7. Spring 实现发送电子邮件的两种方法

     1.通过xml文件配置主要属性: xml文件:test.xml <bean id="mailSender" class="org.springframewor ...

  8. 剑指offer-第四章解决面试题的思路(栈的压入和弹出序列)

    题目:输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否为弹出序列. 思路:定义两个指针sPush和sPop分别指向两个整数序列的开头,借助一个辅助的栈,将第一个序列的数据依次压入栈中 ...

  9. 实现一个自定义<table>标签

    需求是有两个自定义的标签<table>和<column> <table>有个items属性,负责导入数据 package hello; import java.ut ...

  10. unidac连接ORACLE免装客户端驱动

      当你选择Oracle作数据库服务器时,客户端一般需要装一个肥硕的200M左右客户端,而且还要做连接配置,尤其是C/S模式,客户端多的时候非常不便.当然,网上也有一个10M左右的Oracle精简客户 ...