#Inception支持选项及意义 在前面<<Inception使用方法>>一章的例子中已经看到部分选项了。我们的选项是通过在SQL语句块前面以注释的方式一起传达给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语法树打印>>一节。|
现在所支持的选项就上面已经给出的这些,下面是一些特殊说明。
可以看到,上面所说的参数名字除了前面四个连接选项之外,都在前面加了enable,而实际上,这些参数的写法与MySQL配置参数的写法是相同的,比如--enable-check,这个参数的名字只是简单的check,可以写成--check=1,也可以写成--disable-check, 都是比较灵活的,其它的也都是一样的道理。
关于use database
,如果没有使用use语句,则必须要在使用表的同时指定库名,即databasename.tablename
,否则Inception直接报错,但是如果通过 use 语句指定过一次数据库,当前语句块中,后面可以不再指定,除非想修改当前库的名称,而如果通过databasename.tablename
方式指定具体库下面的表,则后面的操作不会受到前面的影响,也就是后面还需要明确指定库名。