---恢复内容开始---

一 简介:这次我们来介绍最核心的审核功能

二 讲解:简单来说 inception就是mysql的二次过滤,何谓二次过滤,我们知道,mysql本身都有自己的审核规则,为业界所通用。但是mysql的规则并不全面,有的很单一,这样inception就在mysql本身规则基础上,丰富完善了这种规则,并且可以自由灵活进行开关,这样就能灵活的适用于不同的场景,非常强大(给作者一个大大的赞)

三 前置:对于mysql默认的规则,本文不会做过多描述。

四 规则简介:

一  INSERT

1 在插入中,必须指定插入的列名,即使全部插入,也需要指定每个列名。(insert into a(a,b,c) values(123,213,13))  inception_check_insert_field=>默认开启

2 标记 not null的列,如果插入的值是null,报错  inception_enable_nullable=》默认开启

二 UPDATE,DELETE

1 必须有where条件   inception_check_dml_where=>默认开启

2 delete语句不能有limit条数  inception_check_dml_limit=》默认开启

3 不能有order by语句  inception_check_dml_orderby=>默认开启

4 影响行数大于10000条,则报警 inception_max_update_rows=》默认开启 可以设置 1-》max(默认值10000)

5 其他就是对于where条件的处理,就不一一说明了

三  Create

此项规则最多,这块也是可以自由定制的最多模块,我只对于自己线上的功能进行定制开发

1 列的类型不能使用集合、枚举、位图类型。 inception_enable_enum_set_bit=》默认关闭(如果线上不需要这些类型,强烈建议开启这个参数)

2 列必须要有注释  inception_check_column_comment=>默认开启(建议开启)

3 表必须要有注释  inception_check_table_comment=》默认开启(建议开启)

4 每个列都使用not null   inception_enable_nullable=》默认开启(建议开启)

5 建表指定的存储引擎不为Innodb,不报错   inception_enable_not_innodb=》默认关闭(建议关闭,另外,以后都是innodb的天下了,放弃myisam吧)

6 表必须要有主键  inception_check_primary_key=>默认开启(建议开启,主键对于表示非常重要的)

7 支持外键 inception_enable_foreign_key=>默认开启(根据业务需求来确定是否开启)

8 支持分区表 inception_enable_partition_table=》默认关闭(根据业务需求来确定是否开启)

9 创建或者新增列时如果列为NULL,进行警告 inception_enable_nullable=》默认开启(建议开启)

10 建表时,必须为timestamp类型指定默认值 inception_check_timestamp_default=》默认开启(建议开启)

11 建库建表所支持的字符集 inception_support_charset=(utf8/utf8mb4)

12 指定列的字符集  inception_enable_column_charset =》默认关闭(不建议开启)

13  建表时的自增类型必须为int or bigint  inception_check_autoincrement_datatype=》默认开启(建议开启,因为这类自增的一般都是主键类型)

14  建表时的自增类型初始值指定必须为1 inception_check_autoincrement_init_value=》默认开启(建议开启)

15  建表时的自增类型为无符号型 inception_enable_autoincrement_unsigned=》默认开启(建议开启)

16  建表时的自增类型命名为ID  inception_check_autoincrement_name=>默认开启(不建议开启)

17  添加索引时,索引名必须以idx_命名 ,唯一索引的前缀是uniq_  inception_check_index_prefix=>默认开启(建议开启,规范命名)

18  一个表中,索引的条数不能大于某个值  inception_max_keys=>默认16(可以设置1-1024)

19 一个索引中,列的个数不能大于某个值   inception_max_key_parts=》默认5 (可以设置1-64)

20 当数据类型char的长度大于某个值,转化为varchar类型  inception_max_char_length=》默认16(可以设置1-MAX,看场景需求选择最大值)

21 合并多个语句,针对同一张表  inception_merge_alter_table=》默认开启(没测试过,不太明白)

22  列是否支持 blob的操作   inception_enable_blob_type=》默认开启(看业务场景)

23  检测关于列的操作是否有默认值(修改 添加)  inception_check_column_default_value => 默认开启(建议开启)

五  DDL :

关于DDL的操作 强烈建议不要走inception, 由DBA自己判断执行。原因很简单,一旦涉及到大表的DDL操作,哪怕是调用PT工具,在业务高峰期依然会执行有问题(本人曾经遇到过因为业务导致的PT工具无法创建触发器问题)

inception_ddl_support => 默认值为关闭

六 如何修改变量:

1 登陆inception 服务

mysql -P  服务端口  -h  host

2  执行命令

inception get variables;

3  进行设置

inception set variable_name=value;

七  测试和beta环境中使用的规则

inception_check_autoincrement_datatype 检测自增长类型
     inception_check_autoincrement_init_value 检测自增长初始值
     inception_check_autoincrement_name 检测自增长名字
     inception_check_column_comment 检测每列的comment|
     inception_check_dml_limit 检测update,delete 不应该有 limit
     inception_check_dml_orderby 检测update,delete 不应该有 order by
     inception_check_dml_where 检测update,delete 必须要有 where
     inception_check_identifier 检测各种命名是否符合mysql规则(字母下划线数字)
     inception_check_index_prefix 检测index的命名 普通索引idx_ 唯一索引uniq_
     inception_check_insert_field 检测insert 语句必须要有列名
     inception_check_primary_key 检测表必须要有主键
     inception_check_table_comment 检测表必须要有commet
     inception_check_timestamp_default 检测列类型timestamp必须要有默认值
     inception_ddl_support 支持DDL操作
     inception_enable_autoincrement_unsigned 检测自增长必须要为无符号型
     inception_enable_blob_type 支持blob类型
     inception_enable_nullable 检测列类型是否为NULL
     inception_enable_orderby_rand 不支持order by rand
     inception_enable_partition_table 不支持分区表 |
     inception_max_char_length char长度超过16就会转为varchar
     inception_max_key_parts 一个索引不能超过5列
     inception_max_keys 一张表最多不能超过16个
     inception_merge_alter_table DML对于同一张表的合并

八  关于规则组合的一个建议:

规则组合需要与研发相适应,DBA可以列一份初始化列表和研发探讨,每个参数的开启与关闭,这样日后inception上线后就不会有研发频繁找到你进行询问了。

九 一些补充

1 inception不支持select

2 inception不支持update(select)这种带子查询的更新

运维数据库平台~inception审核规则详解的更多相关文章

  1. 运维数据库平台~inception测试脚本

    一 简介:今天咱们来聊聊inception的测试脚本 二 范例: #!/usr/bin/python import MySQLdb sql='/*--user=;--password=;--host= ...

  2. 自动化运维工具Ansible之Roles测验详解

    Ansible Roles 详解与实战案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. 该用 ...

  3. 自动化运维工具Ansible的部署步骤详解

    本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...

  4. 自动化运维工具Ansible之Tests测验详解

    Ansible Tests 详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. 该用 ...

  5. Nginx高性能服务器安装、配置、运维 (3) —— Nginx配置详解

    四.Nginx 配置详解 YUM方式安装的Nginx默认配置文件放在/etc/nginx目录下,使用Vim编辑/etc/nginx/nginx.conf: ---------------------- ...

  6. 运维自动化之Cobbler系统安装使用详解[good]

    一.简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成P ...

  7. Linux 运维之硬链接与软链接详解

    了解这个的时候不如先知道下文件吧. 我们知道文件都有文件名与数据,但是呢这个在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata). 用户数据,即文件数据块 ...

  8. 建设DevOps统一运维监控平台,全面的系统监控 Zabbix VS Nagios VS Open-Falcon OR Prometheus

    前言 随着Devops.云计算.微服务.容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器.虚拟机.物理机不一而足.面对动辄几百上千个虚拟机.容 ...

  9. 13. Redis监控运维云平台CacheCloud

    13. Redis监控运维云平台CacheCloud13.1 CacheCloud是什么13.1.1 现有问题13.1.2 CacheCloud基本功能13.2 快速部署13.2.1 CacheClo ...

随机推荐

  1. jenkins--svn基本使用

    新建项目 源码管理  #选择svn配置 svn基本信息配置 其中包括: Repository URL:  svn://10.101.0.XXX:9507/XXXX Credentials:  配置你的 ...

  2. 有趣的线段树模板合集(线段树,最短/长路,单调栈,线段树合并,线段树分裂,树上差分,Tarjan-LCA,势能线段树,李超线段树)

    线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap).一般应用于区间排序. 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来, ...

  3. 利用Python攻破12306的最后一道防线

    各位同学大家好,我是强子,好久没跟大家带来最新的技术文章了,最近有好几个同学问我12306自动抢票能否实现,我就趁这两天有时间用Python做了个12306自动抢票的项目,在这里我来带着大家一起来看看 ...

  4. 08 Zabbix Item类型之Zabbix agent类型

    点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 08 Zabbix Item类型之Zabbix agent类型 Zabbix agent类型的item是使用部署在服务器端的age ...

  5. [luogu2149][bzoj1880][SDOI2009]Elaxia的路线【拓扑排序+最短路+DP】

    题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希望在节约时间 ...

  6. Announcing WebKit SDL port

    转自:http://www.dorothybrowser.com/announcing-webkit-sdl-port/ 下载地址 https://gitorious.org/spiegel/webk ...

  7. JS中every()和some()的用法

    every()与some()方法都是JS中数组的迭代方法. every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true. some()是对数组中每一项运行给定函数,如果 ...

  8. Sublime Text3—常用插件Emmet

    摘要 安装请看上一篇Sublime Text-安装,和sublime自带快捷键一起用,写html简直快的飞起. 下面整理的是常用的,完整的可看emmet官方文档. 一.生成标签 1.快速生成文档结构 ...

  9. GBDT原理详解

    从提升树出发,——>回归提升树.二元分类.多元分类三个GBDT常见算法. 提升树 梯度提升树 回归提升树 二元分类 多元分类 面经 提升树 在说GBDT之前,先说说提升树(boosting tr ...

  10. Hadoop基础-HDFS集群中大数据开发常用的命令总结

    Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...