Inception是一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具,通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能。Inception工作模式和MySQL完全相同,可以直接使用MySQL客户端来连接,但不需要验证权限,它相对应用程序(上层审核流程系统等)而言,是一个服务器,在连接时需要指定服务器地址及Inception服务器的端口即可,而它相对要审核或执行的语句所对应的线上MySQL服务器来说,是一个客户端,它在内部需要实时的连接数据库服务器来获取所需要的信息,或者直接在在线上执行相应的语句及获取binlog等,Inception就是一个中间性质的服务。
Inception实际上是一个服务程序,那么它应该有自己的一套友好的使用方式,必须要具备简单、高效、易用等特性。那么为了让Inception具有这些特点,在设计之初,就规定了它的使用方式,如下所述。
通过Inception对语句进行审核时,必须要告诉Inception这些语句对应的数据库地址、数据库端口以及Inception连接数据库时使用的用户名、密码等信息,而不能简单的只是执行一条sql语句,所以必须要通过某种方式将这些信息传达给Inception。而我们选择的方式是,为了不影响语句的意义,将这些必要信息都以注释的方式放在语句最前面,也就是说所有这些信息都是被/**/括起来的,每一个参数都是通过分号来分隔,类似的方式为:
/*--user=username;--password=xxxx;--host=127.0.0.1;--port=3306;*/
当然支持的参数不止是这几个,还有一些其它的参数
主要选项列表:
参数 | 默认值 | 数据类型 | 说明 |
host | 127.0.0.1 | string | 线上数据库Ip地址 |
port | 0 | int | 线上数据库端口 |
user | ‘’ | string | 线上数据库用户名 |
password | ‘’ | string | 线上数据库密码 |
check | False | bool | 开启审核功能 |
execute | False | bool | 开启执行功能 |
ignore_warnings | False | bool | 是否忽略警告,仅在执行时生效。该参数控制有警告时是继续执行还是中止 |
Inception要做的是一个语句块的审核,需要引入一个规则,将要执行的语句包围起来,Inception规定,在语句的最开始位置,要加上inception_magic_start;语句,在执行语句块的最后加上inception_magic_commit;语句,这2个语句在Inception 中都是合法的、具有标记性质的可被正确解析的SQL语句。被包围起来的所有需要审核或者执行的语句都必须要在每条之后加上分号,其实就是批量执行SQL语句。(包括use database语句之后也要加分号,这点与MySQL 客户端不同),不然存在语法错误。
在具体执行时,在没有解析到inception_magic_start之前如果发现要执行其它的语句,则直接报错,因为规则中inception_magic_start是强制的。而如果在执行的语句块最后没有出现inception_magic_commit,则直接报错,不会做任何操作。在前面注释部分,需要指定一些操作的选项,包括线上用户名、密码、数据库地址、检查/执行等。下面是一个简单的例子:
那么上面这一段就是一批正常可以执行的SQL语句,目前执行只支持通过C/C++接口、Python接口来对Inception访问,这一段必须是一次性的通过执行接口提交给Inception,那么在处理完成之后,Inception会返回一个结果集,来告诉我们这些语句中存在什么错误,或者是完全正常等等。
请不要将下面的SQL语句块,放到MySQL客户端中执行,因为这是一个自动化运维工具,如果使用交互式的命令行来使用的话没有意义,只能是通过写程序来访问Inception服务器。
下面是一段执行上面语句的Python程序的例子:
执行这段程序之后,返回的结果如下:
从返回结果可以看到,每一行语句的审核及执行信息,最前面打印的是field_names,表示Inception的返回结果集的列名信息,总共包括十个列,下面是每个列对应的结果
标题详解:
Id:sql序号
Stage:所处阶段
error_level:错误分级,通过/警告/错误
stage_status:阶段处理汇报信息
error_message:全部错误信息
Sql:语句块中被分离出的一条
affected_rows:预计/实际影响行数
Sequence:备份/回滚序列号
backup_dbname:备份数据库名字
execute_time:当前语句执行时间,单位秒
Inception支持很多可配置的参数,这些配置参数都是全局参数,因为对于同一个服务的规则,不应该经常变化,或者说不应该出现一些业务是这样的规则,而另一些业务是那样的规则,所以这些变量一经设置,就影响所有的审核。如果确实一个公司有多个规则,则建议配置多套Inception服务,在各自的配置文件中指定相应的参数的值。
设置或者打印这些变量的值,可以通过MySQL客户端连接到Inception服务器,通过新的语法命令来实现。连接Inception的时候,只需要指定Inception的地址及端口即可,其它用户名密码可以不指定,因为Inception没有权限验证的过程。
Inception打印变量时,不支持像原来的MySQL服务器一样可以showvariables like ‘%name%’这样实现模糊匹配,只能是精确匹配,如果找不到则返回空结果集,或者可以打印所有变量。语法如下:
支持语句 | 意义 |
inception get variables ‘variable_name’; | 通过variable_name指定变量名称,只显示指定的变量名的值 |
inception get variables; | 显示Inception所有变量的值 |
inception set variable_name=value; | 设置变量名为variable_name的变量的值 |
线上服务器必须要打开 binlog,在启动时需要设置参数log_bin、log_bin_index等关于 binlog 的参数。不然不会备份及生成回滚语句。
参数binlog_format必须要设置为 mixed 或者 row 模式,通过语句: set global binlog_format=mixed/row 来设置,如果是 statement 模式,则不做备份及回滚语句的生成。
参数 server_id 必须要设置为非0及非1,通过语句:set global server_id=server_id;来设置,不然在备份时会报错。
线上服务器一定要有指定用户名的权限,这个是在语句前面的注释中指定的,做什么操作就要有什么权限,否则还是会报错,如果需要执行的功能,则要有线上执行语句的权限,比如DDL及DML,同时如果要执行inception show 等远程命令的话,有些语句是需要特殊权限的,这些权限也是需要授予的,关于权限这个问题,因为一般Inception是运行在一台固定机器上面的,那么在选项中指定的用户名密码,实际上是Inception机器对线上数据库访问的权限,所以建议在使用过程中,使用专门固定的帐号来让Inception使用,最好是一个只读一个可写的即可,这样在执行时用可写,审核或者查看线上状态或者表库结果时用只读即可,这样更安全。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130148.html
摘要:因为传统的数据库管理方式在当前这种架构下依靠手工或者借助简单的工具是无法应对多活架构大规模管理带来的复杂性,因此平台化显得非常重。我们在做的方案时做了充分调查及论证,最终没有选择这种方式。 蔡鹏,2015年加入饿了么,见证了饿了么业务&技术从0到1的发展过程,并全程参与了数据库及DBA团队高速发展全过程。同时也完成个人职能的转型-由运维DBA到DEV-DBA的转变,也从DB的维稳转变到专心为...
摘要:原始版本最早的卷积方式还没有任何骚套路,那就也没什么好说的了。通过卷积核插的方式,它可以比普通的卷积获得更大的感受野,这个的就介绍到这里。和前面不同的是,这个卷积是对特征维度作改进的。 1.原始版本最早的卷积方式还没有任何骚套路,那就也没什么好说的了。见下图,原始的conv操作可以看做一个2D版本的无隐层神经网络。附上一个卷积详细流程:【TensorFlow】tf.nn.conv2d是怎样实...
摘要:严肃的开场白故事要从深度学习说起。本文从视频分类的角度,对深度学习在该方向上的算法进行总结。数据集熟悉深度学习的朋友们应该清楚,深度学习是一门数据驱动的技术,因此数据集对于算法的研究起着非常重要的作用。是一个比较成功的传统方法与深度学习算 showImg(https://segmentfault.com/img/bV7hQP?w=900&h=330); 不严肃的开场白 视频社交已经成为...
摘要:前言本文将介绍一种在线网络工具,可用于可视化各种经典的卷积神经网络结构。其实本文要介绍的工具就是基于开发的,但更像是一个工具包一样,可以方便找到各种经典卷积神经网络的。 前言本文将介绍一种在线网络工具,可用于可视化各种经典的卷积神经网络结构。学习Caffe的同学,一定很熟悉Netscope。它就是用来可视化Caffe的prototxt文件,那么prototxt文件又是啥呢?简而言之,prot...
摘要:卷积神经网络原理浅析卷积神经网络,最初是为解决图像识别等问题设计的,当然其现在的应用不仅限于图像和视频,也可用于时间序列信号,比如音频信号文本数据等。卷积神经网络的概念最早出自世纪年代科学家提出的感受野。 卷积神经网络原理浅析 卷积神经网络(Convolutional Neural Network,CNN)最初是为解决图像识别等问题设计的,当然其现在的应用不仅限于图像和视频,也可用于时间序...
阅读 1345·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4099·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3594·2023-01-11 13:20