MySQL自动化运维平台建设

MySQL自动化运维工具Inception

一、Inception简介

Inception是集审核、执行、回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和MySQL完全相同,可以直接使用MySQL客户端来连接,但不需要验证权限,它相对应用程序(上层审核流程系统等)而言,是一个服务器,在连接时需要指定服务器地址及Inception服务器的端口即可,而它相对要审核或执行的语句所对应的线上MySQL服务器来说,是一个客户端,它在内部需要实时的连接数据库服务器来获取所需要的信息,或者直接在在线上执行相应的语句及获取binlog等,Inception就是一个中间性质的服务。图1.1所示为Inception的架构。

Inception提供的功能很丰富,首先,它可以对提交的所有语句的语法分析,如果语法有问题,都会将相应的错误信息返回给审核者。 还提供语义分析,当一个表,库,列等信息不正确或者不符合规范的时候报错,或者使用了一个不存在的对象时报错等等。 还提供了很多针对SQL规范性约束的功能,这些DBA都是可以通过系统参数来配置的。 更高级的功能是,可以辅助DBA分析一条查询语句的性能,如果没有使用索引或者某些原因导致查询很慢,都可以检查。

还提供SQL语句的执行功能,可执行的语句类型包括常用的DML及DDL语句及truncate table等操作。 Inception 在执行 DML 时还提供生成回滚语句的功能,对应的操作记录及回滚语句会被存储在备份机器上面,备份机器通过配置Inception参数来指定。

项目地址:https://github.com/mysql-inception/inception

文档地址:http://mysql-inception.github.io/inception-document/inception

二、Inception安装

以下安装是CentOS系统,如果是Ubuntu/Debian请看官方文档。

2.1 Git下载源码包


1


$ git clone https://github.com/mysql-inception/inception.git

2.2 安装依赖包


1


$ yum install gcc gcc-c++ cmake bison openssl-devel ncurses-devel MySQL-python –y

2.3 开始编译安装

首先就是编译,在源码根目录下面有一个文件inception_build.sh,执行命令sh inception_build.sh,会输出使用方法。 实际上只需要执行inception_build.sh debug [Xcode]即可,后面的平台是可选的,如果不指定就是linux平台,而如果要指定是Xcode,就后面指定Xcode,而debug是编译的目录,编译之后,所有的生成文件都在这个目录下面,包括可执行文件Inception。可执行文件在debug/sql/Debug/目录下面(不同平台有可能不相同)。


1

2


$ cd inception

$ bash inception_build.sh debug [Xcode]

顺便强调说一下,实际上编译Inception,和编译MySQL源码是一样的,如果有不太了解的同学,可以先在网上看看关于MySQL源码的编译,我想遇到的问题都可以解决。

编译完成之后,就是使用了,那么需要一个配置文件(inc.cnf):


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22


$ cat /etc/inc.cnf

[inception]

general_log=1

general_log_file=inception.log

port=6669

socket=/tmp/inc.socket

character-set-client-handshake=0

character-set-server=utf8

inception_remote_system_password=root

inception_remote_system_user=wzf1

inception_remote_backup_port=3306

inception_remote_backup_host=127.0.0.1

inception_support_charset=utf8mb4

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=/data/temp

inception_osc_chunk_time=0.1

inception_enable_blob_type=1

inception_check_column_default_value=1

2.4 启动Inception程序

启动方式和MySQL是一样的。


1


$ nohup /data/inception/debug/mysql/bin/Inception --defaults-file=/etc/inc.cnf &

注意:因为Inception支持OSC执行的功能,是通过调用pt-online-schema-change工具来做的,但如果Inception后台启动(&)的话,可能会导致pt-online-schema-change在执行完成之后,长时间不返回,进而导致Inception卡死的问题,这个问题官方后面会解决,但现阶段请尽量不要使用后台启动的方式,或者可以使用nohup Inception &的方式来启动。

启动如果不报错的话,说明已经启动成功了,实际上很难让它报错,因为非常轻量级。

启动成功之后,可以简单试一下看,通过MySQL客户端


1


$ mysql -uroot -h127.0.0.1 -P6669

登录上去之后,再执行一个命令:


1


mysql> inception get variables;

输出了所有的变量,恭喜你,已经启动成功了,都说了非常简单。

三、Inception使用

Inception实际上是一个服务程序,那么它应该有自己的一套友好的使用方式,必须要具备简单、高效、易用等特性。那么为了让Inception具有这些特点,在设计之初,就规定了它的使用方式,如下所述。

通过Inception对语句进行审核时,必须要告诉Inception这些语句对应的数据库地址、数据库端口以及Inception连接数据库时使用的用户名、密码等信息,而不能简单的只是执行一条sql语句,所以必须要通过某种方式将这些信息传达给Inception。而我们选择的方式是,为了不影响语句的意义,将这些必要信息都以注释的方式放在语句最前面,也就是说所有这些信息都是被 /**/括起来的,每一个参数都是通过分号来分隔,类似的方式为:


1


/*--user=username;--password=xxxx;--host=127.0.0.1;--port=3306;*/

当然支持的参数不止是这几个,后面还会介绍一些其它的参数。 Inception要做的是一个语句块的审核,需要引入一个规则,将要执行的语句包围起来,Inception规定,在语句的最开始位置,要加上inception_magic_start;语句,在执行语句块的最后加上inception_magic_commit;语句,这2个语句在 Inception 中都是合法的、具有标记性质的可被正确解析的 SQL 语句。被包围起来的所有需要审核或者执行的语句都必须要在每条之后加上分号,其实就是批量执行SQL语句。(包括 use database语句之后也要加分号,这点与 MySQL 客户端不同),不然存在语法错误。

在具体执行时,在没有解析到inception_magic_start之前如果发现要执行其它的语句,则直接报错,因为规则中inception_magic_start是强制的。而如果在执行的语句块最后没有出现inception_magic_commit,则直接报错,不会做任何操作。 在前面注释部分,需要指定一些操作的选项,包括线上用户名、密码、数据库地址、检查/执行等。下面是一个简单的例子:


1

2

3

4

5

6


/*--user=zhufeng;--password=xxxxxxxxxxx;--host=xxxxxxxxxx;

--enable-check;--port=3456;*/

inception_magic_start;

use mysql;

CREATE TABLE adaptive_office(id int);

inception_magic_commit;

那么上面这一段就是一批正常可以执行的SQL语句,目前执行只支持通过C/C++接口、Python接口来对Inception访问,这一段必须是一次性的通过执行接口提交给Inception,那么在处理完成之后,Inception会返回一个结果集,来告诉我们这些语句中存在什么错误,或者是完全正常等等。

请不要将下面的SQL语句块,放到MySQL客户端中执行,因为这是一个自动化运维工具,如果使用交互式的命令行来使用的话没有意义,只能是通过写程序来访问Inception服务器。

而可以通过MySQL客户端来执行的,只有是Inception命令,请参考<<inception命令集语句>>一节。

下面是一段执行上面语句的Python程序的例子:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24


#!/usr/bin/python

#-\*-coding: utf-8-\*-

import MySQLdb

sql='/*--user=root;--password=123456;--host=172.17.0.2;--execute=1;--port=3306;*/\

inception_magic_start;\

create database if not exists test charset utf8mb4;\

use test;\

CREATE TABLE adaptive_office(id int);\

inception_magic_commit;'

try:

conn=MySQLdb.connect(host='127.0.0.1',user='',passwd='',db='',port=6669)

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])

执行这段程序之后,返回的结果如下:


1

2

3

4

5

6

7

8


['ID', 'stage', 'errlevel', 'stagestatus', 'errormessage', 'SQL', 'Affected_rows', 'sequence', 'backup_dbname', 'execute_time', 'sqlsha1']

1 | CHECKED | 0 | Audit completed | None | 2 | CHECKED | 0 | Audit completed | None | 3 | CHECKED | 1 | Audit completed | Set engine to innodb for table 'adaptive_office'.

Set charset to one of 'utf8mb4' for table 'adaptive_office'.

Set comments for table 'adaptive_office'.

Column 'id' in table 'adaptive_office' have no comments.

Column 'id' in table 'adaptive_office' is not allowed to been nullable.

Set Default value for column 'id' in table 'adaptive_office'

Set a primary key for table 'adaptive_office'. |

从返回结果可以看到,每一行语句的审核及执行信息,最前面打印的是field_names,表示Inception的返回结果集的列名信息,总共包括十个列,下面是每个列对应的结果,因为只有两个语句,则只有两行,从结果集第一个列看到只有序号为1和2的两行,而对于每一个列的具体含义,这会在<<Inception结果集>>这一章中讲到,这里只看清楚是什么内容即可。

另外,Inception支持审核以及执行语句,可以自行开启或关闭,具体要看<<Inception选项>>。

更详细内容请看官网,最后说一句,在这里感谢inception作者。

四、Yearning介绍

基于Inception的可视化web端sql审核平台,Yearning SQL审计平台基于Vue.js与Django的整套sql审核平台解决方案,提供基于Inception的SQL检测及执行。

源码地址:https://github.com/cookieY/Yearning

注意:

1,要做数据库初始化  否则500

python3 manage.py makemigrations && python3 manage.py migrate 初始化数据库
echo "from core.models import Account;Account.objects.create_user(username='admin', password='Yearning_admin', group='admin',is_staff=1)" | python3 manage.py shell 添加初始化用户

2,要修改配置文件支持pymysql

由于Inception并不支持pymysql,所以需要更改pymysql相关源码
修改$ PYTHON_HOME / lib / python3.6 / site-packages / pymysql下
connections.py和cursors.py两个文件
找到connections.py 1108行
    if int(self.server_version.split('.', 1)[0]) >= 5:            self.client_flag |= CLIENT.MULTI_RESULTS
更改为
    try:        if int(self.server_version.split('.', 1)[0]) >= 5:            self.client_flag |= CLIENT.MULTI_RESULTS    except:        if self.server_version.split('.', 1)[0] >= 'Inception2':            self.client_flag |= CLIENT.MULTI_RESULTS
找到cursors.py 345行
if self._result and (self._result.has_next or not self._result.warning_count):        return
更改为
 if self._result:    return
注:在安装文件夹下有已经修改的connections.py和cursors.py直接替换即可

这个项目在2018年1月份一出来就很快进入大家的视线,目前有QQ官方群,并且作者会持续更新,更多内容看官网。

原文地址:http://blog.51cto.com/qiuyt/2065163

时间: 2024-09-29 21:11:59

MySQL自动化运维平台建设的相关文章

自动化运维平台之系统自动化安装Cobbler系统使用详解

一.简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP.DNS.以及yum仓库.构造系统ISO镜像. Cobbler支持命令行管理,web界面管理,还提供了API接口,可以方便二次开发使用. Cobbler客户端Koan支持虚拟机安装和操作系统重新安装,使重装系统更便捷. 二.cobbler提供的功能 使用

2015年5月9日公开课第二季—《自动化运维平台的设计理念》

朋友们,随着我们上期公开课的成功举办,马哥linux运维为了给大家分享更多的干货,我们将于2015年5月9日进行公开课第二季,本季公开课将由magedu-comyn老师为大家进行分享! 运维即将迈入2.0时代,越来越追求平台化,自动化,工具化等多元化的整合,相应的,对运维的要求在慢慢的提升,知名互联网公司中,devops已经成为一种新趋势,新的职业,在未来的运维职业中,自动化运维程度要求将会更高,comyn大神的运维自动化框架,已经成熟的运用于多家互联网公司中,标准化流程化自动化,极大的提高了运

从零打造B/S 自动化运维平台 &nbsp; (一、自动化运维平台的应用及业务流程)

背景以及需求: 随着企业业务的不断发展,运营方面,如何保障业务的高可用及服务质量?很多企业处于"半自动化"状态,一但出现故障,技术部人员都会加入"救火"的行列,不仅浪费人力物力,而且使业务出现一段"停运时间",给公司造成一定的损失. 解决方案: 如果要解决以上问题,就需要构建一个高效的运营模式. 要构建一个高效的运营系统,可以从以下几方面放手: 1)制定符合企业特点的 IT 制度 2)流程规范 3)质量与成本管理 4)运营效率建设 接下来我们就开

OMserver自动化运维平台搭建及测试

本文基于<Python自动化运维  技术与最佳实践>第十三章内容"从零开始打造B/S自动化运维平台". 参考链接为作者刘天斯个人博客: https://blog.liuts.com/post/245/ https://blog.liuts.com/post/246/ https://github.com/yorkoliu/pyauto 平台简介:OMServer是本平台的名称.OMServer实现了一个集中式的Linux集群管理基础平台,提供了模块扩展的支持,可以随意添加集

saltstack自动化运维平台的介绍、部署、基本使用

saltstack:服务器基础架构集中化管理平台,有配置管理.远程执行.监控等功能,基于Python语言开发,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq.PyCrypto.Pyjinjia2.python-msgpack和PyYAML等)构建, 优点(1.部署简单便捷:2支持的系统多样:3配置简单,功能强,扩展性好:4基于主从,用证书建立连接,安全性高:5支持API及自定义模块) 认证minion在启动时,会在/etc/salt/pki/minion自动生成minio

[转载] 运维平台规划体系全介绍

原文: http://www.infoq.com/cn/articles/operation-platform-planning-introduction 很多观点我都比较赞同, 特别是工作流引擎+运维可视化的观点 识别运维平台的边界在哪儿,才能更好地构建平台,从而协助运维的日常工作. 在之前的文章中,谈到过“运维的本质——可视化”,在可视化的篇幅中,着重介绍自动化的可视化和数据的可视化:在后续的篇章中又介绍了“互联网运维的价值体系”,里面分解了几个维度:质量.成本.效率.安全等.以上都是为了清

BAT解密:互联网技术发展之路(10)- 运维平台技术

备注:本来想自己写一篇运维体系的文章的,但毕竟不是专业运维人员出身,担心讲的太肤浅,因此转载我的好朋友王金银(江湖人称老王)同学发表在InfoQ的运维体系介绍.老王的牛逼相信很多同学已经领教过了,全球运维技术大会深圳站一个人专场讲运维能讲3个小时,而且会场还爆满,更多老王的介绍可以参考文章的最后,也可以关注老王的微信公众号:互联网运维杂谈. 原文链接:运维平台规划体系全介绍 =============================================================

用友iuap云运维平台支持基于K8s的微服务架构

什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大.更实际的问题.该架构强调的一些准则:单一职责.协议轻量.进程隔离.数据分离.独立部署.按需伸缩. 什么是Kubernetes? Kubernetes是Google开源的容器集群管理系统,其提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能:

授之以渔-运维平台发布模块二(Jenkins篇)

接上篇<授之以渔-运维平台发布模块一(Jenkins篇)>,今天介绍下结合着Saltstack的MasterEven,用来做发布系统的结果监控. 一.Event介绍 SaltStack 0.10版本中, 新增了Event系统, 官方在 Release Notes 对其描述如下: The Salt Master now comes equipped with a new event system. This event system has replaced some of the back e