/inception

一个集审核、执行、备份及生成回滚语句于一身的MySQL自动化运维工具

Primary LanguageCGNU General Public License v3.0GPL-3.0

Inception

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

声明

Inception是一个开源系统,每个人或者每个公司都可以自由使用,由于MySQL代码的复杂性,在审核过程中不可能入戏太深,主要是将最重要的审核完成即可,面对很多复杂的子查询、表达式等是不容易检查到的,所以有些就直接忽略了,那么大家在使用过程中,有任何疑问或者发现任何BUG,都直接提出来,我们大家一起将Inception维护得更好。

修改列表

当前代码为Inception二次开发版本,对原版本修改如下:

  • 错误级别(errlevel)添加DBA审核类型,检测返回结果包含以下4种类型:
    0 正常
    1 警告
    2 DBA审核
    3 错误
  • 添加支持@set语法
  • 修复set类型字段导致coredump问题.
  • 修复update遇到特殊子查询时报数据库不存在问题.

DBA审核类型

当errlevel为2时表示当前语句需要dba人工审核,目前需要dba审核的类型如下:

  • ER_FOREIGN_KEY
    只有dba确认后才能继续执行此类型语句

预执行类型

因为Inceptioin代码在mysql 5.6中执行,但线上环境中包含5.5,5.6,5.7等多种版本,在5.6中检测到的错误未必能说明问题,所以我们添加定义预执行类型5说明此类sql可能需要到对应版本库中预执行之后才能确定是否有问题, 此类型只在程序内部使用不会返回。

预执行类型处理

在检测完所有语句后,如包含此类型语句,Inception会根据目标数据库版本号,选择本地对应测试库去测试当前所有sql,如果在测试库中执行通过,则将出错语句errlevel修改为1(警告),如果执行失败则将errlevel修改为3(执行失败).
目前预执行库为remote库所在IP,端口与版本对应:
5.5.x <--> 5500
5.6.x <--> 5600
5.5.x <--> 5700
8.0.x <--> 8000

文档地址

http://mysql-inception.github.io/inception-document/

代码风格

astyle -xW -w -F -p -xg -xe -k3 -W3 -xb -xj -xf -o -xC200 -L -n