不但所有自动化审核成效,同时还持有实践、生成对影响多少的回滚语句作用

一、Inception简介
一款用于MySQL语句的审查的开源工具,不但具有自动化审核作用,同时还拥有实施、生成对影响多少的回滚语句功用。

一、Inception简介
一款用于MySQL语句的稽核的开源工具,不但具有自动化审核功效,同时还持有实施、生成对影响多少的回滚语句效用。

主题架构:

主干架构:

 图片 1

 图片 2

 

 

二、Inception安装

二、Inception安装

1、软件下载

1、软件下载

下载链接:https://github.com/mysql-inception/inception
文档链接:http://mysql-inception.github.io/inception-document/
2、安装
(1)依赖包安装

下载链接:https://github.com/mysql-inception/inception
文档链接:http://mysql-inception.github.io/inception-document/
2、安装
(1)倚重包安装

inception相关脚本基于python2,所以本人门最好安装python2.X本子,本文是经过python2.6操作

inception相关脚本基于python2,所以本人门最好安装python2.X本子,本文是经过python2.6操作

yum -y install cmake  libncurses5-dev libssl-dev g++ bison openssl-devel.x86_64 
yum -y install cmake  libncurses5-dev libssl-dev g++ bison openssl-devel.x86_64 

(2)编译

(2)编译

[root@node1 ~]# unzip inception-master.zip 
[root@node1 ~]# cd inception-master
[root@node1 ~]# sh inception_build.sh install_dir [Xcode]
[root@node1 ~]# unzip inception-master.zip 
[root@node1 ~]# cd inception-master
[root@node1 ~]# sh inception_build.sh install_dir [Xcode]

##输入参数有五个,第多少个是软件编译安装目录,首个是平台代码,Xcode表示Linux平台,不填表示暗中同意Linux平台

##输入参数有三个,第一个是软件编译安装目录,第2个是阳台代码,Xcode代表Linux平台,不填表示专擅认同Linux平台

mv  install_dir /usr/local/inception
ln -s /usr/local/inception/mysql/Inception  /usr/bin/inception
mv  install_dir /usr/local/inception
ln -s /usr/local/inception/mysql/Inception  /usr/bin/inception

(3)inception配置文件

(3)inception配置文件

/etc/inc.cnf

/etc/inc.cnf

[inception]
general_log=1
general_log_file=/usr/local/inception/log/inception.log
port=6669
socket=/usr/local/inception/inc.socket
character-set-client-handshake=0
character-set-server=utf8
inception_remote_system_user=root
inception_remote_system_password=root123
inception_remote_backup_port=3306
inception_remote_backup_host=10.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=/usr/local/inception/data
inception_osc_chunk_time=0.1
inception_enable_blob_type=1
inception_check_column_default_value=1
[inception]
general_log=1
general_log_file=/usr/local/inception/log/inception.log
port=6669
socket=/usr/local/inception/inc.socket
character-set-client-handshake=0
character-set-server=utf8
inception_remote_system_user=root
inception_remote_system_password=root123
inception_remote_backup_port=3306
inception_remote_backup_host=10.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=/usr/local/inception/data
inception_osc_chunk_time=0.1
inception_enable_blob_type=1
inception_check_column_default_value=1

##特意参数解释

##尤其参数解释

inception_remote_system_user=root          ##远程备份数据库用户名
inception_remote_system_password=root123      ##远程备份数据库用户密码
inception_remote_backup_port=3306          ##远程备份数据库端口
inception_remote_backup_host=10.xx.xx.xx      ##远程备份数据库IP地址,本次演示例如10.0.0.1
inception_support_charset=utf8mb4,utf8,latin1   ##建表、建库MYSQL支持的字符集类型
inception_remote_system_user=root          ##远程备份数据库用户名
inception_remote_system_password=root123      ##远程备份数据库用户密码
inception_remote_backup_port=3306          ##远程备份数据库端口
inception_remote_backup_host=10.xx.xx.xx      ##远程备份数据库IP地址,本次演示例如10.0.0.1
inception_support_charset=utf8mb4,utf8,latin1   ##建表、建库MYSQL支持的字符集类型

##任何安顿参考附录

##其余布署参考附录

(4)启动
a.运营格局01

(4)启动
a.运维格局01

inception --defaults-file=/etc/inc.cnf
##最佳启动方式是通过nohup后台启动
nohup  inception --defaults-file=/etc/inc.cnf &
inception --defaults-file=/etc/inc.cnf
##最佳启动方式是通过nohup后台启动
nohup  inception --defaults-file=/etc/inc.cnf &

b.运维格局02

b.运维情势02

inception --port=6669
inception --port=6669

 

 

专注:
因为Inception协助OSC执行的机能,是通过调用pt-online-schema-change工具来做的,但万一Inception后台运转(&)的话,可能会促成pt-online-schema-change在实施到位之后,长日子不回去,进而导致Inception卡死的题材,这一个题材背后会解决,但目前请尽大概不要选用后台运转的方法,或许能够动用nohup
Inception运营命令 &的法子来运行。

瞩目:
因为Inception资助OSC执行的法力,是透过调用pt-online-schema-change工具来做的,但要是Inception后台运行(&)的话,恐怕会导致pt-online-schema-change在进行到位之后,长日子不回去,进而导致Inception卡死的难题,那几个难题背后会缓解,但当下请尽只怕不要使用后台运维的点子,大概可以运用nohup
Inception运营命令 &的主意来运维。

(5)登陆校验
运维成功今后,可以简简单单试一下看,通过MySQL客户端

(5)登陆校验
开端成功之后,能够大概试一下看,通过MySQL客户端

mysql -uroot -h127.0.0.1 -P6669
mysql -uroot -h127.0.0.1 -P6669

登录上去未来,再实施贰个命令:

登录上去然后,再履行一个限令:

inception get variables;
出口了颇具的变量,恭喜你,已经起步成功了,都说了卓殊不难。

inception get variables;
出口了富有的变量,恭喜你,已经起步成功了,都说了分外简单。

三、Inception使用

三、Inception使用

本次业务目标库IP接纳10.0.0.2

此次业务目的库IP采纳10.0.0.2

1、数据库DDL操作

1、数据库DDL操作

(1)建库

(1)建库

亟待指定字符集,不会生出回滚

须要指定字符集,不会爆发回滚

#!/usr/bin/env python
#--*--coding=utf8--*--

import MySQLdb

sql='''/*--user=root;--password=123456;--host=10.0.0.2;--execute=1;--port=3306;*/\
    inception_magic_start;\
    create database  dbtest01 DEFAULT CHARACTER SET utf8mb4;\
    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 as e:
       print "Mysql Error %d: %s" % (e.args[0], e.args[1]) 
#!/usr/bin/env python
#--*--coding=utf8--*--

import MySQLdb

sql='''/*--user=root;--password=123456;--host=10.0.0.2;--execute=1;--port=3306;*/\
    inception_magic_start;\
    create database  dbtest01 DEFAULT CHARACTER SET utf8mb4;\
    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 as e:
       print "Mysql Error %d: %s" % (e.args[0], e.args[1]) 

 

 

(2)建表

(2)建表

建表操作检查项如下:
表属性的检查项
    这个表不存在
    对于create table like,会检查like的老表是不是存在。
    对于create table db.table,会检查db这个数据库是不是存在
    表名、列名、索引名的长度不大于64个字节
    如果建立的是临时表,则必须要以tmp为前缀
    必须要指定建立innodb的存储引擎(可配置)
    必须要指定utf8的字符集(字符串可配置,指定支持哪些字符集)
    表必须要有注释(可配置)
    表不能建立为分区表(可配置)
    只能有一个自增列
    索引名字不能是Primay
    不支持Foreign key(可配置)
    建表时,如果指定auto_increment的值不为1,报错(可配置)
    如果自增列的名字不为id,说明有可能是有意义的,MySQL这样使用比较危险,所以报警(可配置)
列属性的检查项
    不能设置列的字符集(可配置)
    列的类型不能使用集合、枚举、位图类型。(可配置)
    列必须要有注释(可配置)
    char长度大于20的时候需要改为varchar(长度可配置)
    列的类型不能是BLOB/TEXT。(可配置)
    每个列都使用not null(可配置)
    如果列为BLOB/TEXT类型的,则这个列不能设置为NOT NULL。
    如何是自增列,则使用无符号类型(可配置)
    如果自增列,则长度必须要大于等于4个字节(可配置)
    如果是timestamp类型的,则要必须指定默认值。
    对于MySQL5.5版本(包含)以下的数据库,不能同时有两个TIMESTAMP类型的列,如果是DATETIME类型,则不能定义成DATETIME DEFAULT CURRENT_TIMESTAMP及ON UPDATE CURRENT_TIMESTAMP等语句。
    每个列都需要定义默认值,除了自增列、主键列及大字段列之外(可配置)
    不能有重复的列名
索引属性检查项
    索引必须要有名字
    不能有外键(可配置)
    Unique索引必须要以uniq_为前缀(可配置)
    普通索引必须要以idx_为前缀(可配置)
    索引的列数不能超过5个(数目可以配置)
    表必须要有一个主键(可配置)
    最多有5个索引(数目可配置)
    建索引时,指定的列必须存在。
    索引中的列,不能重复
    BLOB列不能建做KEY
    索引长度不能超过766
    不能有重复的索引,名字及内容
默认值检查项
    BLOB/TEXT类型的列,不能有非NULL的默认值
    MySQL5.5以下(含)的版本,对于DATETIME类型的列,不能有函数NOW()的默认值。
    如果设置默认值为函数,则只能是NOW()。
    如果默认值为NULL,但列类型为NOT NULL,或者是主键列,或者定义为自增列,则报错。
    自增列不能设置默认值。
建表操作检查项如下:
表属性的检查项
    这个表不存在
    对于create table like,会检查like的老表是不是存在。
    对于create table db.table,会检查db这个数据库是不是存在
    表名、列名、索引名的长度不大于64个字节
    如果建立的是临时表,则必须要以tmp为前缀
    必须要指定建立innodb的存储引擎(可配置)
    必须要指定utf8的字符集(字符串可配置,指定支持哪些字符集)
    表必须要有注释(可配置)
    表不能建立为分区表(可配置)
    只能有一个自增列
    索引名字不能是Primay
    不支持Foreign key(可配置)
    建表时,如果指定auto_increment的值不为1,报错(可配置)
    如果自增列的名字不为id,说明有可能是有意义的,MySQL这样使用比较危险,所以报警(可配置)
列属性的检查项
    不能设置列的字符集(可配置)
    列的类型不能使用集合、枚举、位图类型。(可配置)
    列必须要有注释(可配置)
    char长度大于20的时候需要改为varchar(长度可配置)
    列的类型不能是BLOB/TEXT。(可配置)
    每个列都使用not null(可配置)
    如果列为BLOB/TEXT类型的,则这个列不能设置为NOT NULL。
    如何是自增列,则使用无符号类型(可配置)
    如果自增列,则长度必须要大于等于4个字节(可配置)
    如果是timestamp类型的,则要必须指定默认值。
    对于MySQL5.5版本(包含)以下的数据库,不能同时有两个TIMESTAMP类型的列,如果是DATETIME类型,则不能定义成DATETIME DEFAULT CURRENT_TIMESTAMP及ON UPDATE CURRENT_TIMESTAMP等语句。
    每个列都需要定义默认值,除了自增列、主键列及大字段列之外(可配置)
    不能有重复的列名
索引属性检查项
    索引必须要有名字
    不能有外键(可配置)
    Unique索引必须要以uniq_为前缀(可配置)
    普通索引必须要以idx_为前缀(可配置)
    索引的列数不能超过5个(数目可以配置)
    表必须要有一个主键(可配置)
    最多有5个索引(数目可配置)
    建索引时,指定的列必须存在。
    索引中的列,不能重复
    BLOB列不能建做KEY
    索引长度不能超过766
    不能有重复的索引,名字及内容
默认值检查项
    BLOB/TEXT类型的列,不能有非NULL的默认值
    MySQL5.5以下(含)的版本,对于DATETIME类型的列,不能有函数NOW()的默认值。
    如果设置默认值为函数,则只能是NOW()。
    如果默认值为NULL,但列类型为NOT NULL,或者是主键列,或者定义为自增列,则报错。
    自增列不能设置默认值。

python脚本如下

python脚本如下

#!/usr/bin/env python
# -*- UTF-8 -*-

import MySQLdb

sql='''/*--user=root;--password=123456;--host=10.0.0.2;--execute=1;--port=3306;*/\
    inception_magic_start;\
    use dbtest;\
    CREATE TABLE table_test(id int comment 'test' primary key) engine=innodb DEFAULT CHARSET=utf8mb4 comment '测试';\
    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 as e:
       print "Mysql Error %d: %s" % (e.args[0], e.args[1])
#!/usr/bin/env python
# -*- UTF-8 -*-

import MySQLdb

sql='''/*--user=root;--password=123456;--host=10.0.0.2;--execute=1;--port=3306;*/\
    inception_magic_start;\
    use dbtest;\
    CREATE TABLE table_test(id int comment 'test' primary key) engine=innodb DEFAULT CHARSET=utf8mb4 comment '测试';\
    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 as e:
       print "Mysql Error %d: %s" % (e.args[0], e.args[1])

施行结果如下:

实践结果如下:

[root@node1 ~]# python a.py 
['ID', 'stage', 'errlevel', 'stagestatus', 'errormessage', 'SQL', 'Affected_rows', 'sequence', 'backup_dbname', 'execute_time', 'sqlsha1']
1 | RERUN | 0 | Execute Successfully | None | use dbtest | 0 | '1514535958_11_0' | None | 0.000 | 
2 | EXECUTED | 0 | Execute Successfully
Backup successfully | None | CREATE TABLE table_test(id int comment 'test' primary key) engine=innodb DEFAULT CHARSET=utf8mb4 comment '测试' | 0 | '1514535958_11_1' | 10_129_128_97_3306_dbtest | 0.010 | 
[root@node1 ~]# python a.py 
['ID', 'stage', 'errlevel', 'stagestatus', 'errormessage', 'SQL', 'Affected_rows', 'sequence', 'backup_dbname', 'execute_time', 'sqlsha1']
1 | RERUN | 0 | Execute Successfully | None | use dbtest | 0 | '1514535958_11_0' | None | 0.000 | 
2 | EXECUTED | 0 | Execute Successfully
Backup successfully | None | CREATE TABLE table_test(id int comment 'test' primary key) engine=innodb DEFAULT CHARSET=utf8mb4 comment '测试' | 0 | '1514535958_11_1' | 10_129_128_97_3306_dbtest | 0.010 | 

检查备份库:(10.0.0.1)

自作者批评备份库:(10.0.0.1)

##会增多七个数据库,分别是IP_端口_事务库命名的数据库,用以存放回滚记录、SQL操作日志;库inception,用于存储操作影响行数、时间等

##会大增多少个数据库,分别是IP_端口_事情库命名的数据库,用以存放回滚记录、SQL操作日志;库inception,用于存储操作影响行数、时间等

(root:localhost:Fri Dec 29 15:41:46 2017)[(none)]>show databases;
+---------------------------+
| Database                  |
+---------------------------+
| information_schema        |
| 10_0_0_1_3306_dbtest |
| inception                 |
| mysql                     |
| performance_schema        |
| sys                       |
+---------------------------+

(root:localhost:Fri Dec 29 15:46:27 2017)[(none)]>show tables from 10_0_0_1_3306_dbtest;
+-------------------------------------+
| Tables_in_10_0_0_1_3306_dbtest |
+-------------------------------------+
| $_$Inception_backup_information$_$  |
| table_test                          |
+-------------------------------------+
2 rows in set (0.00 sec)

(root:localhost:Fri Dec 29 15:47:08 2017)[(none)]>show tables from inception ;               
+---------------------+
| Tables_in_inception |
+---------------------+
| statistic           |
+---------------------+
1 row in set (0.00 sec)

##10_0_0_1_3306_dbtest库下表$_$Inception_backup_information$_$ 存储内容如下:  

##10_0_0_1_3306_dbtest库下表table_test 存储内容如下:
(root:localhost:Fri Dec 29 15:41:46 2017)[(none)]>show databases;
+---------------------------+
| Database                  |
+---------------------------+
| information_schema        |
| 10_0_0_1_3306_dbtest |
| inception                 |
| mysql                     |
| performance_schema        |
| sys                       |
+---------------------------+

(root:localhost:Fri Dec 29 15:46:27 2017)[(none)]>show tables from 10_0_0_1_3306_dbtest;
+-------------------------------------+
| Tables_in_10_0_0_1_3306_dbtest |
+-------------------------------------+
| $_$Inception_backup_information$_$  |
| table_test                          |
+-------------------------------------+
2 rows in set (0.00 sec)

(root:localhost:Fri Dec 29 15:47:08 2017)[(none)]>show tables from inception ;               
+---------------------+
| Tables_in_inception |
+---------------------+
| statistic           |
+---------------------+
1 row in set (0.00 sec)

##10_0_0_1_3306_dbtest库下表$_$Inception_backup_information$_$ 存储内容如下:  

##10_0_0_1_3306_dbtest库下表table_test 存储内容如下:

 图片 3

 图片 4

##inception库下表statistic存储内容如下:
##inception库下表statistic存储内容如下:

 id optime usedb deleting inserting updating selecting altertable
renaming createindex dropindex addcolumn dropcolumn changecolumn
alteroption alterconvert createtable droptable createdb truncating
 1 2017/12/29 15:42:37 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

 id optime usedb deleting inserting updating selecting altertable
renaming createindex dropindex addcolumn dropcolumn changecolumn
alteroption alterconvert createtable droptable createdb truncating
 1 2017/12/29 15:42:37 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

 检核查象库:(10.0.0.2)

 检核查象库:(10.0.0.2)

图片 5

图片 6

 

 

(3) DROP/TRUNCE

(3) DROP/TRUNCE

 

 

(4)ALTER

(4)ALTER

修改表操作检查项如下:
    表是不是存在
创建索引检查项
    同上面创建表中的索引检查项
加列检查项
    同上面创建表中的列检查项
修改表检查项
    表是不是存在
    如果语句块中存在多条对同一个表的修改语句,则建议合并成一个ALTER语句
    列是否存在
    剩下的同上面创建表,创建索引,创建列,默认值等检查项一样
删除索引检查项
    表是不是存在
    检查索引是不是存在
修改列的默认值检查项
    同默认值检查项
修改表属性
    表属性只支持对存储引擎、表注释、自增值及默认字符集的修改操作。
    修改存储引擎时检查是不是Innodb(可配置)。
    字符集修改检查是不是属于设置参数的值(支持字符集可配置)。
转换表字符集
    字符集修改检查是不是属于设置参数的值(支持字符集可配置)。
修改表操作检查项如下:
    表是不是存在
创建索引检查项
    同上面创建表中的索引检查项
加列检查项
    同上面创建表中的列检查项
修改表检查项
    表是不是存在
    如果语句块中存在多条对同一个表的修改语句,则建议合并成一个ALTER语句
    列是否存在
    剩下的同上面创建表,创建索引,创建列,默认值等检查项一样
删除索引检查项
    表是不是存在
    检查索引是不是存在
修改列的默认值检查项
    同默认值检查项
修改表属性
    表属性只支持对存储引擎、表注释、自增值及默认字符集的修改操作。
    修改存储引擎时检查是不是Innodb(可配置)。
    字符集修改检查是不是属于设置参数的值(支持字符集可配置)。
转换表字符集
    字符集修改检查是不是属于设置参数的值(支持字符集可配置)。

(5)存储进程

(5)存储进度

 不援救存储进度调用 

 不协理存储进程调用 

2、数据库DML操作

2、数据库DML操作

a.插入操作

a.插入操作

插入语句检查项如下:
    表是否存在
    必须指定插入列表,也就是要对哪几个列指定插入值,如insert into t (id,id2) values(...),(可配置)
    必须指定值列表,与上面对应的列,插入的值是什么,必须要指定。
    插入列列表与值列表个数相同,上面二者的个数需要相同,如果没有指定列列表(因为可配置),则值列表长度要与表列数相同。
    不为null的列,如果插入的值是null,报错(可配置)
    插入指定的列名对应的列必须是存在的。
    插入指定的列列表中,同一个列不能出现多次。
    插入值列表中的简单表达式会做检查,但具体包括什么不一一指定
插入语句检查项如下:
    表是否存在
    必须指定插入列表,也就是要对哪几个列指定插入值,如insert into t (id,id2) values(...),(可配置)
    必须指定值列表,与上面对应的列,插入的值是什么,必须要指定。
    插入列列表与值列表个数相同,上面二者的个数需要相同,如果没有指定列列表(因为可配置),则值列表长度要与表列数相同。
    不为null的列,如果插入的值是null,报错(可配置)
    插入指定的列名对应的列必须是存在的。
    插入指定的列列表中,同一个列不能出现多次。
    插入值列表中的简单表达式会做检查,但具体包括什么不一一指定

 b.更新操作

 b.更新操作

更新操作检查项如下:
    表是否存在
    必须有where条件(可配置)
    delete语句不能有limit条件(可配置)
    不能有order by语句(可配置)
    影响行数大于10000条,则报警(数目可配置)
    对WHERE条件这个表达式做简单检查,具体包括什么不一一指定
    对更新列的值列表表达式做简单检查,具体不一一指定
    对更新列对象做简单检查,主要检查列是不是存在等
    多表更新、删除时,每个表必须要存在
更新操作检查项如下:
    表是否存在
    必须有where条件(可配置)
    delete语句不能有limit条件(可配置)
    不能有order by语句(可配置)
    影响行数大于10000条,则报警(数目可配置)
    对WHERE条件这个表达式做简单检查,具体包括什么不一一指定
    对更新列的值列表表达式做简单检查,具体不一一指定
    对更新列对象做简单检查,主要检查列是不是存在等
    多表更新、删除时,每个表必须要存在

 c.删除操作 

 c.删除操作 

删除操作检查项如下:
    表是否存在
    必须有where条件(可配置)
    delete语句不能有limit条件(可配置)
    不能有order by语句(可配置)
    影响行数大于10000条,则报警(数目可配置)
    对WHERE条件这个表达式做简单检查,具体包括什么不一一指定
    对更新列的值列表表达式做简单检查,具体不一一指定
    对更新列对象做简单检查,主要检查列是不是存在等
    多表更新、删除时,每个表必须要存在
删除操作检查项如下:
    表是否存在
    必须有where条件(可配置)
    delete语句不能有limit条件(可配置)
    不能有order by语句(可配置)
    影响行数大于10000条,则报警(数目可配置)
    对WHERE条件这个表达式做简单检查,具体包括什么不一一指定
    对更新列的值列表表达式做简单检查,具体不一一指定
    对更新列对象做简单检查,主要检查列是不是存在等
    多表更新、删除时,每个表必须要存在

 3、数据库SELECT操作

 3、数据库SELECT操作

select操作检查项如下:
    对象是否存在(表、列)
    是否是select * (默认不允许select * )
select操作检查项如下:
    对象是否存在(表、列)
    是否是select * (默认不允许select * )

 

 

4、数据库DCL操作

4、数据库DCL操作

 

 

五,远程变量获取

5、远程变量获取

#!/usr/bin/env python
#--*--coding=utf8--*--

import MySQLdb

sql='''/*--user=root;--password=123456;--host=10.129.128.97;--execute=1;--port=3306;*/\
    inception_magic_start;\
    inception show variables like "read%";
    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 as e:
       print "Mysql Error %d: %s" % (e.args[0], e.args[1]) 
#!/usr/bin/env python
#--*--coding=utf8--*--

import MySQLdb

sql='''/*--user=root;--password=123456;--host=10.129.128.97;--execute=1;--port=3306;*/\
    inception_magic_start;\
    inception show variables like "read%";
    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 as e:
       print "Mysql Error %d: %s" % (e.args[0], e.args[1]) 

6、OSC操作

6、OSC操作

OSC进度查看:
inception get osc_percent '当前执行的SQL语句以及一些基本信息生成的SHA1哈希值';

输出内容解释如下:
OSC进度查看:
inception get osc_percent '当前执行的SQL语句以及一些基本信息生成的SHA1哈希值';

输出内容解释如下:
  • TABLENAME:当前被涂改的表名;
  • DBNAME:当前被修改表所在的库名;
  • SQLSHA1:当前要询问的语句的SHA1字符串;
  • PERCENT:当前涂改已经形成的比例,那么些值是0到100的值。
  • REMAINTIME:当前修改语句还须要多久才能连成一气,如03:55代表还索要三分55秒,01:33:44意味着还亟需1钟头33分44秒。
  • INFOMATION:突显当前OSC执行时的状态消息,内容为OSC当前有所的出口消息,不包含百分比信息,百分比还是由地点的列来突显,那几个有利在行使时随时查看执行到哪一步了,可以进一步了解的摸底到实践进程。
  • TABLENAME:当前被涂改的表名;
  • DBNAME:当前被修改表所在的库名;
  • SQLSHA1:当前要询问的讲话的SHA1字符串;
  • PERCENT:当前涂改已经做到的比重,这一个值是0到100的值。
  • REMAINTIME:当前涂改语句还要求多长期才能成功,如03:55象征还索要三分55秒,01:33:44代表还亟需1钟头33分44秒。
  • INFOMATION:展现当前OSC执行时的景况新闻,内容为OSC当前颇具的出口新闻,不包蕴百分比音信,百分比依旧由地点的列来突显,这几个便利在行使时随时查看执行到哪一步了,可以更进一步了然的打听到执行进程。

  OSC操作终止:(需等触发器建立、已毕之后)

  OSC操作终止:(需等触发器建立、完成之后)

  inception stop alter
‘当前推行的SQL语句以及部分大旨消息变化的SHA1哈希值’ ;

  inception stop alter
‘当前实施的SQL语句以及部分着力消息变更的SHA1哈希值’ ;

  查看所有OSC操作:

  查看所有OSC操作:

  inception get osc processlist;

  inception get osc processlist;

7、查看inception processlist操作

7、查看inception processlist操作

查看processlist
(1:127.0.0.1:Fri Dec 29 21:21:47 2017)[(none)]>inception get processlist;
+----+-----------+-----------+-----------+-----------+---------+----------+------+---------------------------+-----------------+
| Id | Dest_User | Dest_Host | Dest_Port | From_Host | Command | STATE    | Time | Info                      | Current_Execute |
+----+-----------+-----------+-----------+-----------+---------+----------+------+---------------------------+-----------------+
| 20 |           |           |         0 | localhost | LOCAL   | CHECKING |    0 | inception get processlist | NULL            |
+----+-----------+-----------+-----------+-----------+---------+----------+------+---------------------------+-----------------+
查看processlist
(1:127.0.0.1:Fri Dec 29 21:21:47 2017)[(none)]>inception get processlist;
+----+-----------+-----------+-----------+-----------+---------+----------+------+---------------------------+-----------------+
| Id | Dest_User | Dest_Host | Dest_Port | From_Host | Command | STATE    | Time | Info                      | Current_Execute |
+----+-----------+-----------+-----------+-----------+---------+----------+------+---------------------------+-----------------+
| 20 |           |           |         0 | localhost | LOCAL   | CHECKING |    0 | inception get processlist | NULL            |
+----+-----------+-----------+-----------+-----------+---------+----------+------+---------------------------+-----------------+
  1. id:1个简短的计数。
  2. dest_user:表示近来举行语句访问数据库时所用的用户名。
  3. dest_host:表示如今执行语句要拜访的数据库地址。
  4. dest_port:表示方今实践语句要访问的数据库的端口。
  5. from_host:表示如今推行语句是从机器上发起的。
  6. command:表示近期实施的是怎么着操作,包含CHECK(简单审核),EXECUTE(执行),SPLIT(拆分),P冠道INT(打印安顿树),LOCAL(本地命令)。
  7. state:表示在此时此刻命令下,执行的景况是哪些,状态包涵INIT(开头阶段),CHECKING(正在审批),EXECUTING(正在执行),DEINIT(退出),BACKUP(正在备份)。
  8. time:表示方今语句执行所用时间。
  9. info:展现当前正值执行的口舌。
  1. id:贰个简易的计数。
  2. dest_user:表示近期施行语句访问数据库时所用的用户名。
  3. dest_host:表示如今实践语句要拜访的数据库地址。
  4. dest_port:表示近日执行语句要访问的数据库的端口。
  5. from_host:表示方今实施语句是从机器上发起的。
  6. command:表示近年来履行的是如何操作,包罗CHECK(不难审核),EXECUTE(执行),SPLIT(拆分),P凯雷德INT(打印陈设树),LOCAL(本地命令)。
  7. state:表示在现阶段命令下,执行的动静是何许,状态包涵INIT(伊始阶段),CHECKING(正在甄别),EXECUTING(正在实践),DEINIT(退出),BACKUP(正在备份)。
  8. time:表示近年来语句执行所用时间。
  9. info:展现当前正值实践的讲话。

 

 

八,结果集解释

8、结果集解释

ID:用来表示检查的sql序号的,每次检查都是从1开始。

stage:这个列显示当前语句已经进行到哪一步了,包括CHECKED、EXECUTED、RERUN、NONE,NONE表示没有做过任何处理,有可能前面有语法错误直接就提前返回了, CHECKED表示这个语句只做过审核,而没有再进行下一步操作,EXECUTED表示已经执行过,如果执行失败,也是用这个状态表示,RERUN表示的是,对于影响上下文的语句,已经执行成功,但为了与EXECUTED区分,用RERUN表示,主要是因为在执行过程中,如果某一条语句执行失败了,则上层可能需要将没有执行的语句提取出来,再次执行,那么影响上下文的语句是需要加上的,所以用RERUN来表示。影响上下文的语句一般包括set names和use db这两种,而当前Inception支持的只有这两种。

errlevel:返回值为非0的情况下,说明是有错的。1表示警告,不影响执行,2表示严重错误,必须修改。

stagestatus:用来表示检查及执行的过程是成功还是失败,如果审核成功,则返回 Audit completed。如果执行成功则返回Execute Successfully,否则返回Execute failed,如果备份成功,则在后面追加Backup successfully,否则追加Backup failed,这个列的返回信息是为了将结果集直接输出而设置的,如果在具体使用过程中,为了更友好的显示,可以在这基础上再做加工处理。

errormessage:用来表示出错错误信息,这里包括一条语句中所有的错误信息,用换行符分隔,但有时候如果某一个错误导致不能继续分析了,则后面的错误就不能显示出来。如果没有出错,则用显示为None。而对于执行及备份错误,因为对于一条语句,这样的错误只会有一次,那么执行错误会在后面追加“execute:具体的执行错误原因”,如果是备份出错,则在后面追加“backup:具体的备份错误原因”,而在执行时,有时候会出现Warnings,比如插入数据时字符串被截断啥的,此时会输出这些warnings:#1 Execute(Warning, Code errno):warning message,#号后面的数字表示第几个警告,因为有时候执行一个语句会产生多个警告。

SQL:用来表示当前检查的是哪条sql语句。如果某一条sql语句在检查时有语法错误,则这里面会包括从出错语句开始到后面所有的语句,因为语法出错后实在是真的不能再继续分析了,也就不能将后面的每条语句分开了,这个列还会有一个特别的地方,如果当前语句是inception show xxxx命令集中的第一种情况(<<Inception命令集>>中会做具体介绍)。

affected_rows:用来表示当前语句执行时预计影响的行数,在执行时显示的是真实影响行数。

sequence:这个列与上面说的备份功能有关系,其实就是对应$$Inception_backup_information$$表中的 opid_time 这个列,一一对应,这就为前端应用在针对某一操作回滚找到了入口,每次执行都会产生一个序号,如果要回滚,则就使用这个值从备份表中找到对应的回滚语句执行即可。

backup_dbname:这个列表示的是当前语句产生的备份信息,存储在备份服务器的哪个数据库中,这是一个字符串类型的值,只针对需要备份的语句,数据库名由IP地址、端口、源数据库名组成,由下划线连接,而如果是不需要备份的语句,则返回字符串None。

execute_time:这个列表示当前语句执行时间,单位为秒,精确到小数点后两位。列类型为字符串,使用时可能需要转换成DOUBLE类型的值,如果只是审核而不执行,则这个列返回的值为0。

SQLSHA1:这个列用来存储当前这个语句的一个HASH值,这是用来标识这个语句是不是会使用OSC功能,如果返回信息中有值,则表示这个语句在执行的时候会使用OSC,因为在执行前,会有一次单独的审核操作,此时上层已经可以拿到这个值,审核通过之后,语句是不会改变的,当然这个值也不会改变,那么在执行时就可以使用这个值来查看OSC执行的进度等信息,这个值一般长的样子如下:D0210DFF35F0BC0A7C95CD98F5BCD4D9B0CA8154*
ID:用来表示检查的sql序号的,每次检查都是从1开始。

stage:这个列显示当前语句已经进行到哪一步了,包括CHECKED、EXECUTED、RERUN、NONE,NONE表示没有做过任何处理,有可能前面有语法错误直接就提前返回了, CHECKED表示这个语句只做过审核,而没有再进行下一步操作,EXECUTED表示已经执行过,如果执行失败,也是用这个状态表示,RERUN表示的是,对于影响上下文的语句,已经执行成功,但为了与EXECUTED区分,用RERUN表示,主要是因为在执行过程中,如果某一条语句执行失败了,则上层可能需要将没有执行的语句提取出来,再次执行,那么影响上下文的语句是需要加上的,所以用RERUN来表示。影响上下文的语句一般包括set names和use db这两种,而当前Inception支持的只有这两种。

errlevel:返回值为非0的情况下,说明是有错的。1表示警告,不影响执行,2表示严重错误,必须修改。

stagestatus:用来表示检查及执行的过程是成功还是失败,如果审核成功,则返回 Audit completed。如果执行成功则返回Execute Successfully,否则返回Execute failed,如果备份成功,则在后面追加Backup successfully,否则追加Backup failed,这个列的返回信息是为了将结果集直接输出而设置的,如果在具体使用过程中,为了更友好的显示,可以在这基础上再做加工处理。

errormessage:用来表示出错错误信息,这里包括一条语句中所有的错误信息,用换行符分隔,但有时候如果某一个错误导致不能继续分析了,则后面的错误就不能显示出来。如果没有出错,则用显示为None。而对于执行及备份错误,因为对于一条语句,这样的错误只会有一次,那么执行错误会在后面追加“execute:具体的执行错误原因”,如果是备份出错,则在后面追加“backup:具体的备份错误原因”,而在执行时,有时候会出现Warnings,比如插入数据时字符串被截断啥的,此时会输出这些warnings:#1 Execute(Warning, Code errno):warning message,#号后面的数字表示第几个警告,因为有时候执行一个语句会产生多个警告。

SQL:用来表示当前检查的是哪条sql语句。如果某一条sql语句在检查时有语法错误,则这里面会包括从出错语句开始到后面所有的语句,因为语法出错后实在是真的不能再继续分析了,也就不能将后面的每条语句分开了,这个列还会有一个特别的地方,如果当前语句是inception show xxxx命令集中的第一种情况(<<Inception命令集>>中会做具体介绍)。

affected_rows:用来表示当前语句执行时预计影响的行数,在执行时显示的是真实影响行数。

sequence:这个列与上面说的备份功能有关系,其实就是对应$$Inception_backup_information$$表中的 opid_time 这个列,一一对应,这就为前端应用在针对某一操作回滚找到了入口,每次执行都会产生一个序号,如果要回滚,则就使用这个值从备份表中找到对应的回滚语句执行即可。

backup_dbname:这个列表示的是当前语句产生的备份信息,存储在备份服务器的哪个数据库中,这是一个字符串类型的值,只针对需要备份的语句,数据库名由IP地址、端口、源数据库名组成,由下划线连接,而如果是不需要备份的语句,则返回字符串None。

execute_time:这个列表示当前语句执行时间,单位为秒,精确到小数点后两位。列类型为字符串,使用时可能需要转换成DOUBLE类型的值,如果只是审核而不执行,则这个列返回的值为0。

SQLSHA1:这个列用来存储当前这个语句的一个HASH值,这是用来标识这个语句是不是会使用OSC功能,如果返回信息中有值,则表示这个语句在执行的时候会使用OSC,因为在执行前,会有一次单独的审核操作,此时上层已经可以拿到这个值,审核通过之后,语句是不会改变的,当然这个值也不会改变,那么在执行时就可以使用这个值来查看OSC执行的进度等信息,这个值一般长的样子如下:D0210DFF35F0BC0A7C95CD98F5BCD4D9B0CA8154*

 

 

四、Inception附录
1、适用场景 

四、Inception附录
壹,适用场景 

a.支持的SQL操作
use db:此时会检查这个库是不是存在,需要连接到线上服务器来判断。
set option:现在只需要支持set names charset,设置其它变量时都报错不支持。
创建数据库语句
插入语句(包括多值插入)
查询插入语句
删除语句(包括多表删除)
更新语句(包括多表更新)
创建表语句
删除表语句
修改表语句
Truncate表语句
inception命令集语句(包括管理命令)
b.线上服务器必须要打开 binlog,在启动时需要设置参数log_bin、log_bin_index等关于 binlog 的参数。不然不会备份及生成回滚语句。
c.参数binlog_format必须要设置为 mixed 或者 row 模式,通过语句: set global binlog_format=mixed/row 来设置,如果是 statement 模式,则不做备份及回滚语句的生成。
d.参数 server_id 必须要设置为非0及非1,通过语句:set global server_id=server_id;来设置,不然在备份时会报错。
e.线上服务器一定要有指定用户名的权限,这个是在语句前面的注释中指定的,做什么操作就要有什么权限,否则还是会报错,如果需要执行的功能,则要有线上执行语句的权限,比如DDL及DML,同时如果要执行inception show 等远程命令的话,有些语句是需要特殊权限的,这些权限也是需要授予的,关于权限这个问题,因为一般Inception是运行在一台固定机器上面的,那么在选项中指定的用户名密码,实际上是Inception机器对线上数据库访问的权限,所以建议在使用过程中,使用专门固定的帐号来让Inception使用,最好是一个只读一个可写的即可,这样在执行时用可写,审核或者查看线上状态或者表库结果时用只读即可,这样更安全。
f.在执行时,不能将 DML 语句及 DDL 语句放在一起执行,否则会因为备份解析binlog时由于表结构的变化出现不可预知的错误,如果要有同时执行 DML 及 DDL,则请分开多个语句块儿来执行,如果真的这样做了,Inception 会报错,不会去执行。
a.支持的SQL操作
use db:此时会检查这个库是不是存在,需要连接到线上服务器来判断。
set option:现在只需要支持set names charset,设置其它变量时都报错不支持。
创建数据库语句
插入语句(包括多值插入)
查询插入语句
删除语句(包括多表删除)
更新语句(包括多表更新)
创建表语句
删除表语句
修改表语句
Truncate表语句
inception命令集语句(包括管理命令)
b.线上服务器必须要打开 binlog,在启动时需要设置参数log_bin、log_bin_index等关于 binlog 的参数。不然不会备份及生成回滚语句。
c.参数binlog_format必须要设置为 mixed 或者 row 模式,通过语句: set global binlog_format=mixed/row 来设置,如果是 statement 模式,则不做备份及回滚语句的生成。
d.参数 server_id 必须要设置为非0及非1,通过语句:set global server_id=server_id;来设置,不然在备份时会报错。
e.线上服务器一定要有指定用户名的权限,这个是在语句前面的注释中指定的,做什么操作就要有什么权限,否则还是会报错,如果需要执行的功能,则要有线上执行语句的权限,比如DDL及DML,同时如果要执行inception show 等远程命令的话,有些语句是需要特殊权限的,这些权限也是需要授予的,关于权限这个问题,因为一般Inception是运行在一台固定机器上面的,那么在选项中指定的用户名密码,实际上是Inception机器对线上数据库访问的权限,所以建议在使用过程中,使用专门固定的帐号来让Inception使用,最好是一个只读一个可写的即可,这样在执行时用可写,审核或者查看线上状态或者表库结果时用只读即可,这样更安全。
f.在执行时,不能将 DML 语句及 DDL 语句放在一起执行,否则会因为备份解析binlog时由于表结构的变化出现不可预知的错误,如果要有同时执行 DML 及 DDL,则请分开多个语句块儿来执行,如果真的这样做了,Inception 会报错,不会去执行。

 

 

2、优缺点
(1)优点:

2、优缺点
(1)优点:

a.接济有力的语法分析检查,同时可依照自个儿须求调整审批、执行操作语句

a.协助有力的语法分析检查,同时可依照本身须要调整审批、执行操作语句

b.扶助审核、回滚、OSC

b.协助审核、回滚、OSC

c.

c.

(2)缺点:
a.只帮忙MYSQL数据库的核对工作

(2)缺点:
a.只援救MYSQL数据库的甄别工作

b.面对众多错综复杂的子查询、表明式等是不易于检查到的,所以有些就直接忽略了

b.面对广大繁杂的子查询、表达式等是不简单检查到的,所以某个就径直忽略了

c.不匡助DDL和DML同时设有的SQL操作

c.不匡助DDL和DML同时存在的SQL操作

d.python2.X配置,MySQLdb安装,OSC安装

d.python2.X配置,MySQLdb安装,OSC安装

f.检查规则固定,结果集固定

f.检查规则固定,结果集固定

叁,安装不当

三,安装不当

(1)错误示例01
荒谬日志:

(1)错误示例01
不当日志:

[ 30%] Generating include/probes_mysql_dtrace.h, include/probes_mysql_nodtrace.h
File "/usr/bin/dtrace", line 170
print _("Usage ") + sys.argv[0] + " [--help] [-h | -G] [-C [-I<Path>]] -s File.d [-o <File>]"
^
SyntaxError: invalid syntax
make[2]: *** [include/probes_mysql_dtrace.h] Error 1
make[1]: *** [CMakeFiles/gen_dtrace_header.dir/all] Error 2
make: *** [all] Error 2
[ 30%] Generating include/probes_mysql_dtrace.h, include/probes_mysql_nodtrace.h
File "/usr/bin/dtrace", line 170
print _("Usage ") + sys.argv[0] + " [--help] [-h | -G] [-C [-I<Path>]] -s File.d [-o <File>]"
^
SyntaxError: invalid syntax
make[2]: *** [include/probes_mysql_dtrace.h] Error 1
make[1]: *** [CMakeFiles/gen_dtrace_header.dir/all] Error 2
make: *** [all] Error 2

化解方案:

化解方案:

yum install dtrace systemtap-sdt-devel -y
yum install dtrace systemtap-sdt-devel -y

(2)错误示例02

(2)错误示例02

荒唐日志:

荒谬日志:

[ 61%] Building CXX object libmysql/CMakeFiles/libmysql.dir/libmysql_exports_file.cc.o
make[2]: *** No rule to make target `probes_mysql.o', needed by `libmysql/libmysqlclient.so.18.0.0'. Stop.
make[1]: *** [libmysql/CMakeFiles/libmysql.dir/all] Error 2
make: *** [all] Error 2
[ 61%] Building CXX object libmysql/CMakeFiles/libmysql.dir/libmysql_exports_file.cc.o
make[2]: *** No rule to make target `probes_mysql.o', needed by `libmysql/libmysqlclient.so.18.0.0'. Stop.
make[1]: *** [libmysql/CMakeFiles/libmysql.dir/all] Error 2
make: *** [all] Error 2

缓解方案:

不留余地方案:

删除编译文件,并做相关库文件软链接
ln -s /usr/local/mysql/lib/libperconaserverclient.so.18.1.0  /usr/lib64/libmysqlclient.so.18.0.0
如依旧报错,可做其他类似的软链接到/usr/lib64/下
删除编译文件,并做相关库文件软链接
ln -s /usr/local/mysql/lib/libperconaserverclient.so.18.1.0  /usr/lib64/libmysqlclient.so.18.0.0
如依旧报错,可做其他类似的软链接到/usr/lib64/下

四,inception扶助的参数变量

肆,inception扶助的参数变量

透过inception get variables;可以查看所有参数变量设置值

经过inception get variables;能够查阅所有参数变量设置值

通过inception get variables ‘variable_name’;获取指定参数值

通过inception get variables ‘variable_name’;获取指定参数值

通过inception set variable_name=value;设置参数值

通过inception set variable_name=value;设置参数值

数名字 可选参数 默认值 功能说明
inception_check_insert_field ON/OFF ON 是不是要检查插入语句中的列链表的存在性
inception_check_dml_where ON/OFF ON 在DML语句中没有WHERE条件时,是不是要报错
inception_check_dml_limit ON/OFF ON 在DML语句中使用了LIMIT时,是不是要报错
inception_check_dml_orderby ON/OFF ON 在DML语句中使用了Order By时,是不是要报错
inception_enable_select_star ON/OFF ON Select*时是不是要报错
inception_enable_orderby_rand ON/OFF ON order by rand时是不是报错
inception_enable_nullable ON/OFF ON 创建或者新增列时如果列为NULL,是不是报错
inception_enable_foreign_key ON/OFF ON 是不是支持外键
inception_max_key_parts 1-64 5 一个索引中,列的最大个数,超过这个数目则报错
inception_max_update_rows 1-MAX 10000 在一个修改语句中,预计影响的最大行数,超过这个数就报错
inception_max_keys 1-1024 16 一个表中,最大的索引数目,超过这个数则报错
inception_enable_not_innodb ON/OFF OFF 建表指定的存储引擎不为Innodb,不报错
inception_support_charset MySQL支持字符集 "utf8mb4" 表示在建表或者建库时支持的字符集,如果需要多个,则用逗号分隔,影响的范围是建表、设置会话字符集、修改表字符集属性等
inception_check_table_comment ON/OFF ON 建表时,表没有注释时报错
inception_check_column_comment ON/OFF ON 建表时,列没有注释时报错
inception_check_primary_key ON/OFF On 建表时,如果没有主键,则报错
inception_enable_partition_table ON/OFF OFF 是不是支持分区表
inception_enable_enum_set_bit ON/OFF OFF 是不是支持enum,set,bit数据类型
inception_check_index_prefix ON/OFF ON 是不是要检查索引名字前缀为"idx_",检查唯一索引前缀是不是"uniq_"
inception_enable_autoincrement_unsigned ON/OFF ON 自增列是不是要为无符号型
inception_max_char_length 1-MAX 16 当char类型的长度大于这个值时,就提示将其转换为VARCHAR
inception_check_autoincrement_init_value ON/OFF ON 当建表时自增列的值指定的不为1,则报错
inception_check_autoincrement_datatype ON/OFF ON 当建表时自增列的类型不为int或者bigint时报错
inception_check_timestamp_default ON/OFF ON 建表时,如果没有为timestamp类型指定默认值,则报错
inception_enable_column_charset ON/OFF OFF 允许列自己设置字符集
inception_check_autoincrement_name ON/OFF ON 建表时,如果指定的自增列的名字不为ID,则报错,说明是有意义的,给提示
inception_merge_alter_table ON/OFF ON 在多个改同一个表的语句出现是,报错,提示合成一个
inception_check_column_default_value ON/OFF ON 检查在建表、修改列、新增列时,新的列属性是不是要有默认值
inception_enable_blob_type ON/OFF ON 检查是不是支持BLOB字段,包括建表、修改列、新增列操作
inception_enable_identifer_keyword ON/OFF OFF 检查在SQL语句中,是不是有标识符被写成MySQL的关键字,默认值为报警。
auto_commit ON/OFF OFF 这个参数的作用是为了匹配Python客户端每次自动设置auto_commit=0的,如果取消则会报错,针对Inception本身没有实际意义
bind_address string * 这个参数实际上就是MySQL数据库原来的参数,因为Incpetion没有权限验证过程,那么为了实现更安全的访问,可以给Inception服务器的这个参数设置某台机器(Inception上层的应用程序)不地址,这样其它非法程序是不可访问的,那么再加上Inception执行的选项中的用户名密码,对MySQL就更加安全
general_log ON/OFF ON 这个参数就是原生的MySQL的参数,用来记录在Inception服务上执行过哪些语句,用来定位一些问题等
general_log_file string inception.log 设置general log写入的文件路径
inception_user string empty 这个用户名在配置之后,在连接Inception的选项中可以不指定user,这样线上数据库的用户名及密码就可以不暴露了,可以做为临时使用的一种方式,但这个用户现在只能是用来审核,也就是说,即使在选项中指定–enable-execute,也不能执行,这个是只能用来审核的帐号。
inception_password string empty 与上面的参数是一对,这个参数对应的是选项中的password,设置这个参数之后,可以在选项中不指定password
inception_enable_sql_statistic ON/OFF ON 设置是不是支持统计Inception执行过的语句中,各种语句分别占多大比例,如果打开这个参数,则每次执行的情况都会在备份数据库实例中的inception库的statistic表中以一条记录存储这次操作的统计情况,每次操作对应一条记录,这条记录中含有的信息是各种类型的语句执行次数情况,具体的信息需要参考后面一章<<Inception 的统计功能>>
inception_read_only ON/OFF OFF 设置当前Inception服务器是不是只读的,这是为了防止一些人具有修改权限的帐号时,通过Inception误修改一些数据,如果inception_read_only设置为ON,则即使开了enable-execute,同时又有执行权限,也不会去执行,审核完成即返回
inception_check_identifier ON/OFF ON 打开与关闭Inception对SQL语句中各种名字的检查,如果设置为ON,则如果发现名字中存在除数字、字母、下划线之外的字符时,会报Identifier "invalidname" is invalid, valid options: [a-z,A-Z,0-9,_].
数名字 可选参数 默认值 功能说明
inception_check_insert_field ON/OFF ON 是不是要检查插入语句中的列链表的存在性
inception_check_dml_where ON/OFF ON 在DML语句中没有WHERE条件时,是不是要报错
inception_check_dml_limit ON/OFF ON 在DML语句中使用了LIMIT时,是不是要报错
inception_check_dml_orderby ON/OFF ON 在DML语句中使用了Order By时,是不是要报错
inception_enable_select_star ON/OFF ON Select*时是不是要报错
inception_enable_orderby_rand ON/OFF ON order by rand时是不是报错
inception_enable_nullable ON/OFF ON 创建或者新增列时如果列为NULL,是不是报错
inception_enable_foreign_key ON/OFF ON 是不是支持外键
inception_max_key_parts 1-64 5 一个索引中,列的最大个数,超过这个数目则报错
inception_max_update_rows 1-MAX 10000 在一个修改语句中,预计影响的最大行数,超过这个数就报错
inception_max_keys 1-1024 16 一个表中,最大的索引数目,超过这个数则报错
inception_enable_not_innodb ON/OFF OFF 建表指定的存储引擎不为Innodb,不报错
inception_support_charset MySQL支持字符集 "utf8mb4" 表示在建表或者建库时支持的字符集,如果需要多个,则用逗号分隔,影响的范围是建表、设置会话字符集、修改表字符集属性等
inception_check_table_comment ON/OFF ON 建表时,表没有注释时报错
inception_check_column_comment ON/OFF ON 建表时,列没有注释时报错
inception_check_primary_key ON/OFF On 建表时,如果没有主键,则报错
inception_enable_partition_table ON/OFF OFF 是不是支持分区表
inception_enable_enum_set_bit ON/OFF OFF 是不是支持enum,set,bit数据类型
inception_check_index_prefix ON/OFF ON 是不是要检查索引名字前缀为"idx_",检查唯一索引前缀是不是"uniq_"
inception_enable_autoincrement_unsigned ON/OFF ON 自增列是不是要为无符号型
inception_max_char_length 1-MAX 16 当char类型的长度大于这个值时,就提示将其转换为VARCHAR
inception_check_autoincrement_init_value ON/OFF ON 当建表时自增列的值指定的不为1,则报错
inception_check_autoincrement_datatype ON/OFF ON 当建表时自增列的类型不为int或者bigint时报错
inception_check_timestamp_default ON/OFF ON 建表时,如果没有为timestamp类型指定默认值,则报错
inception_enable_column_charset ON/OFF OFF 允许列自己设置字符集
inception_check_autoincrement_name ON/OFF ON 建表时,如果指定的自增列的名字不为ID,则报错,说明是有意义的,给提示
inception_merge_alter_table ON/OFF ON 在多个改同一个表的语句出现是,报错,提示合成一个
inception_check_column_default_value ON/OFF ON 检查在建表、修改列、新增列时,新的列属性是不是要有默认值
inception_enable_blob_type ON/OFF ON 检查是不是支持BLOB字段,包括建表、修改列、新增列操作
inception_enable_identifer_keyword ON/OFF OFF 检查在SQL语句中,是不是有标识符被写成MySQL的关键字,默认值为报警。
auto_commit ON/OFF OFF 这个参数的作用是为了匹配Python客户端每次自动设置auto_commit=0的,如果取消则会报错,针对Inception本身没有实际意义
bind_address string * 这个参数实际上就是MySQL数据库原来的参数,因为Incpetion没有权限验证过程,那么为了实现更安全的访问,可以给Inception服务器的这个参数设置某台机器(Inception上层的应用程序)不地址,这样其它非法程序是不可访问的,那么再加上Inception执行的选项中的用户名密码,对MySQL就更加安全
general_log ON/OFF ON 这个参数就是原生的MySQL的参数,用来记录在Inception服务上执行过哪些语句,用来定位一些问题等
general_log_file string inception.log 设置general log写入的文件路径
inception_user string empty 这个用户名在配置之后,在连接Inception的选项中可以不指定user,这样线上数据库的用户名及密码就可以不暴露了,可以做为临时使用的一种方式,但这个用户现在只能是用来审核,也就是说,即使在选项中指定–enable-execute,也不能执行,这个是只能用来审核的帐号。
inception_password string empty 与上面的参数是一对,这个参数对应的是选项中的password,设置这个参数之后,可以在选项中不指定password
inception_enable_sql_statistic ON/OFF ON 设置是不是支持统计Inception执行过的语句中,各种语句分别占多大比例,如果打开这个参数,则每次执行的情况都会在备份数据库实例中的inception库的statistic表中以一条记录存储这次操作的统计情况,每次操作对应一条记录,这条记录中含有的信息是各种类型的语句执行次数情况,具体的信息需要参考后面一章<<Inception 的统计功能>>
inception_read_only ON/OFF OFF 设置当前Inception服务器是不是只读的,这是为了防止一些人具有修改权限的帐号时,通过Inception误修改一些数据,如果inception_read_only设置为ON,则即使开了enable-execute,同时又有执行权限,也不会去执行,审核完成即返回
inception_check_identifier ON/OFF ON 打开与关闭Inception对SQL语句中各种名字的检查,如果设置为ON,则如果发现名字中存在除数字、字母、下划线之外的字符时,会报Identifier "invalidname" is invalid, valid options: [a-z,A-Z,0-9,_].

五,inception接济的挑选

伍,inception协助的采取

主如果在实施sql的时候指定的sql=”’/*–user=root;–password=123456;–host=10.0.0.2;–execute=1;–port=3306;*/

要害是在推行sql的时候指定的sql=”’/*–user=root;–password=123456;–host=10.0.0.2;–execute=1;–port=3306;*/

参数名字 是否需要参数 参数是否可选 功能描述
–host 指定将要执行/审核这部分语句块的数据库地址。
–port 指定将要执行这部分语句块的数据库端口。
–password 指定Inception连接数据库的密码。
–user 指定Inception连接数据库的用户名。
–sleep 这个参数用来指定在执行完每一条语句之后,暂停多少毫秒,这样可以适当控制对线上数据库的冲击,特别是针对大量写入的操作,单位为毫秒,最小值为0,也就是不暂停,最大值为100秒,也就是100000毫秒。如果设置得超过100000毫秒,Inception会自动将其设置为100000毫秒。这个参数可以和其它参数一起设置,但是只有在–enable-execute为1的情况下,才起作用。
–enable-check 告诉Inception当前要做什么操作,是审核还是执行,这个参数与下面的–enable-execute只能指定一个。
–enable-execute 告诉Inception当前要做什么操作,是审核还是执行,这个参数与上面的–enable-check只能指定一个, 如果指定的是这个参数,则Inception在执行前还会做一次实时的审核,那么这个审核和前面指定–enable-check时的审核基本是相同的,因为相同的语句在不同的时间审核产生不同的结果是有可能的(环境有可能变了),所以再做一次审核是有必要的,如果审核发现错误(而不是警告)就不会被执行,当然如果没有指定–enable-ignore-warnings的话,有警告也是不会执行的,但有错误的话,肯定是不会被执行。
–enable-force 告诉Inception,当在执行过程中碰到一个错误时,是中止执行还是保存错误信息继续执行下一个语句,这个参数要谨慎使用。
–enable-ignore-warnings Inception采取严格的分阶段处理,如果审核有问题则不能执行,那么针对一些特殊问题并且审核有警告不通过,但人工审核没问题确定可以执行时,可以选择这个参数,告诉Inception跳过这个警告的检查,继续执行。
–enable-remote-backup 指定在执行时是不是要备份,这个参数默认是打开的,如果不想备份,则指定参数–disable-remote-backup,这个选项所支持的备份,实际上是对当前所执行的操作的备份及被修改数据的回滚语句的存储,关于备份的具体内容,在后面章节中专门介绍。
–enable-split 这个参数是用来拆分要执行的语句块的,如果在语句块中存在对同一个表的DDL操作及DML操作,那么在备份及生成回滚语句分析binlog时,由于表结构已经发生改变,会导致inception没法处理,所以使用这个参数将这些语句分成多批,然后再分别执行,这是在执行前必须要做的一个操作,不然可能产生不可预知的错误,当然在执行前的最后一次审核中,如果检查到有这样的混用情况,会报错返回,而不是警告。这个参数指定之后,除了前面四个参数之外,其它参数都被忽略,也可以不指定。
–enable-query-print 这个参数用来打印提供SQL语句在被MySQL分析之后的执行树结构,以Json的形式提供,目的是为了可以在Inception的基础上,对已经结构化的(Json)被分析之后的语句做再次分析,比如使用到哪些列、语句类型等信息,目前支持的语句类型有:插入、删除、更新及查询,具体详情请参考<<Inception语法树打印>>一节。
参数名字 是否需要参数 参数是否可选 功能描述
–host 指定将要执行/审核这部分语句块的数据库地址。
–port 指定将要执行这部分语句块的数据库端口。
–password 指定Inception连接数据库的密码。
–user 指定Inception连接数据库的用户名。
–sleep 这个参数用来指定在执行完每一条语句之后,暂停多少毫秒,这样可以适当控制对线上数据库的冲击,特别是针对大量写入的操作,单位为毫秒,最小值为0,也就是不暂停,最大值为100秒,也就是100000毫秒。如果设置得超过100000毫秒,Inception会自动将其设置为100000毫秒。这个参数可以和其它参数一起设置,但是只有在–enable-execute为1的情况下,才起作用。
–enable-check 告诉Inception当前要做什么操作,是审核还是执行,这个参数与下面的–enable-execute只能指定一个。
–enable-execute 告诉Inception当前要做什么操作,是审核还是执行,这个参数与上面的–enable-check只能指定一个, 如果指定的是这个参数,则Inception在执行前还会做一次实时的审核,那么这个审核和前面指定–enable-check时的审核基本是相同的,因为相同的语句在不同的时间审核产生不同的结果是有可能的(环境有可能变了),所以再做一次审核是有必要的,如果审核发现错误(而不是警告)就不会被执行,当然如果没有指定–enable-ignore-warnings的话,有警告也是不会执行的,但有错误的话,肯定是不会被执行。
–enable-force 告诉Inception,当在执行过程中碰到一个错误时,是中止执行还是保存错误信息继续执行下一个语句,这个参数要谨慎使用。
–enable-ignore-warnings Inception采取严格的分阶段处理,如果审核有问题则不能执行,那么针对一些特殊问题并且审核有警告不通过,但人工审核没问题确定可以执行时,可以选择这个参数,告诉Inception跳过这个警告的检查,继续执行。
–enable-remote-backup 指定在执行时是不是要备份,这个参数默认是打开的,如果不想备份,则指定参数–disable-remote-backup,这个选项所支持的备份,实际上是对当前所执行的操作的备份及被修改数据的回滚语句的存储,关于备份的具体内容,在后面章节中专门介绍。
–enable-split 这个参数是用来拆分要执行的语句块的,如果在语句块中存在对同一个表的DDL操作及DML操作,那么在备份及生成回滚语句分析binlog时,由于表结构已经发生改变,会导致inception没法处理,所以使用这个参数将这些语句分成多批,然后再分别执行,这是在执行前必须要做的一个操作,不然可能产生不可预知的错误,当然在执行前的最后一次审核中,如果检查到有这样的混用情况,会报错返回,而不是警告。这个参数指定之后,除了前面四个参数之外,其它参数都被忽略,也可以不指定。
–enable-query-print 这个参数用来打印提供SQL语句在被MySQL分析之后的执行树结构,以Json的形式提供,目的是为了可以在Inception的基础上,对已经结构化的(Json)被分析之后的语句做再次分析,比如使用到哪些列、语句类型等信息,目前支持的语句类型有:插入、删除、更新及查询,具体详情请参考<<Inception语法树打印>>一节。

6.OSC参数

6.OSC参数

参数名称 作用域 默认值 说明
inception_osc_bin_dir GLOBAL 用于指定pt-online-schema-change脚本的位置,不可修改,在配置文件中设置
inception_osc_check_interval SESSION 5秒 对应参数–check-interval,意义是Sleep time between checks for –max-lag.
inception_osc_chunk_size SESSION 1000 对应参数–chunk-size
inception_osc_chunk_size_limit SESSION 4 对应参数–chunk-size-limit
inception_osc_chunk_time SESSION 1 对应参数–chunk-time
inception_osc_critical_thread_connected SESSION 1000 对应参数–critical-load中的thread_connected部分
inception_osc_critical_thread_running SESSION 80 对应参数–critical-load中的thread_running部分
inception_osc_drop_new_table SESSION 1 对应参数–[no]drop-new-table
inception_osc_drop_old_table SESSION 1 对应参数–[no]drop-old-table
inception_osc_check_replication_filters SESSION 1 对应参数–[no]check-replication-filters
inception_osc_check_alter SESSION 1 对应参数–[no]check-alter
inception_osc_max_lag SESSION 3 对应参数–max-lag
inception_osc_max_thread_connected SESSION 1000 对应参数–max-load中的thread_connected部分
inception_osc_max_thread_running SESSION 80 对应参数–max-load中的thread_running部分
inception_osc_recursion_method SESSION processlist 对应OSC参数recursion_method,具体意义可以参考OSC官方手册
inception_osc_alter_foreign_keys_method SESSION none 对应OSC参数alter-foreign-keys-method,具体意义可以参考OSC官方手册
inception_osc_min_table_size SESSION 16 这个参数实际上是一个OSC的开关,如果设置为0,则全部ALTER语句都走OSC,如果设置为非0,则当这个表占用空间大小大于这个值时才使用OSC方式。单位为M,这个表大小的计算方式是通过语句: "select (DATA_LENGTH + INDEX_LENGTH)/1024/1024 from information_schema.tables where table_schema = ‘dbname’ and table_name = ‘tablename’"来实现的。
inception_osc_on GLOBAL 1 一个全局的OSC开关,默认是打开的,如果想要关闭则设置为OFF,这样就会直接修改
inception_osc_print_sql GLOBAL 1 对应参数–print
inception_osc_print_none GLOBAL 1 用来设置在Inception返回结果集中,对于原来OSC在执行过程的标准输出信息是不是要打印到结果集对应的错误信息列中,如果设置为1,就不打印,如果设置为0,就打印。而如果出现错误了,则都会打印
参数名称 作用域 默认值 说明
inception_osc_bin_dir GLOBAL 用于指定pt-online-schema-change脚本的位置,不可修改,在配置文件中设置
inception_osc_check_interval SESSION 5秒 对应参数–check-interval,意义是Sleep time between checks for –max-lag.
inception_osc_chunk_size SESSION 1000 对应参数–chunk-size
inception_osc_chunk_size_limit SESSION 4 对应参数–chunk-size-limit
inception_osc_chunk_time SESSION 1 对应参数–chunk-time
inception_osc_critical_thread_connected SESSION 1000 对应参数–critical-load中的thread_connected部分
inception_osc_critical_thread_running SESSION 80 对应参数–critical-load中的thread_running部分
inception_osc_drop_new_table SESSION 1 对应参数–[no]drop-new-table
inception_osc_drop_old_table SESSION 1 对应参数–[no]drop-old-table
inception_osc_check_replication_filters SESSION 1 对应参数–[no]check-replication-filters
inception_osc_check_alter SESSION 1 对应参数–[no]check-alter
inception_osc_max_lag SESSION 3 对应参数–max-lag
inception_osc_max_thread_connected SESSION 1000 对应参数–max-load中的thread_connected部分
inception_osc_max_thread_running SESSION 80 对应参数–max-load中的thread_running部分
inception_osc_recursion_method SESSION processlist 对应OSC参数recursion_method,具体意义可以参考OSC官方手册
inception_osc_alter_foreign_keys_method SESSION none 对应OSC参数alter-foreign-keys-method,具体意义可以参考OSC官方手册
inception_osc_min_table_size SESSION 16 这个参数实际上是一个OSC的开关,如果设置为0,则全部ALTER语句都走OSC,如果设置为非0,则当这个表占用空间大小大于这个值时才使用OSC方式。单位为M,这个表大小的计算方式是通过语句: "select (DATA_LENGTH + INDEX_LENGTH)/1024/1024 from information_schema.tables where table_schema = ‘dbname’ and table_name = ‘tablename’"来实现的。
inception_osc_on GLOBAL 1 一个全局的OSC开关,默认是打开的,如果想要关闭则设置为OFF,这样就会直接修改
inception_osc_print_sql GLOBAL 1 对应参数–print
inception_osc_print_none GLOBAL 1 用来设置在Inception返回结果集中,对于原来OSC在执行过程的标准输出信息是不是要打印到结果集对应的错误信息列中,如果设置为1,就不打印,如果设置为0,就打印。而如果出现错误了,则都会打印