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