前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你了解goinception

一文带你了解goinception

作者头像
DBA札记
发布2022-08-16 14:05:11
1.9K0
发布2022-08-16 14:05:11
举报
文章被收录于专栏:MySQL参数系列

goinception简介

SQL审核是DBA的一项常规工作,人工审核机械无聊。王竹峰老师研发开源了inception工具,造福了广大DBA,也是业界SQL审核的标志性工具。

goinception是韩川川老师在基于inception的基础上,借鉴了tidb的语法解析器实现的golang版本的工具。

goInception是一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具, 通过对执行SQL的语法解析,返回基于自定义规则的审核结果,并提供执行和备份及生成回滚语句的功能。

图1 goinception架构

安装

安装方式有三种:分别是源码安装、二进制安装、docker安装。

0 源码安装

go版本v1.12及以上

使用go mod做依赖管理

代码语言:javascript
复制
# 下载源码
git clone https://github.com/hanchuanchuan/goInceptioncd goInceptionmake parser

cd goInception
#下载依赖包
go mod tidy
make parser
#构建二进制包
go build -o goInception tidb-server/main.go

启动(注意指定配置文件)
./goInception -config=config/config.toml

1 二进制安装

代码语言:javascript
复制
#下载二进制包(根据需求下载对应版本)
wget https://github.com/hanchuanchuan/goInception/releases/download/v1.3.0/goInception-linux-v1.3.0-1-g140054c.tar.gz
#解压包
tar -xvf goInception-linux-v1.3.0-1-g140054c.tar.gz
#启动
./goInception -config=config/config.toml

2 docker安装

直接拉取镜像修改参数启动即可或者根据提供的docker-compose集成在docker-compose中。配置文件如下:

代码语言:javascript
复制
version: '2'

services:
  goinception:
    image: hanchuanchuan/goinception
    container_name: goinception
    restart: always
    # 网络模式二选一,使用主机host模式或者映射端口
    network_mode: "host"
    # ports:
    #   - 4000:4000
    volumes:
      # 时区
      # - /etc/localtime:/etc/localtime
      # 配置文件
      - ./config/config.toml:/etc/config.toml

参数说明

goinception有提供默认参数文件config.toml.default,修改需要修改的部分,然后重命名为config.toml。必须要填写备份审核库信息。

代码语言:javascript
复制
backup_host = ""
backup_port = 0
backup_user = ""
backup_password = ""

审核规则修改

审核规则有很多,大家可以参考官方文档。此处说明如何修改审核规则:

1、登录goinception审核server

代码语言:javascript
复制
mysql -h127.0.0.1 -P400

2、查看参数

代码语言:javascript
复制
inception show levels;
# 筛选指定审核名称
inception show levels like '%blob%';
# 筛选指定级别
inception show levels where value=2;
# 筛选指定关键字
inception show levels where `desc` like '%index%';

3、设置审核级别

代码语言:javascript
复制
inception set level er_no_where_condition = 2;

4、修改参数

代码语言:javascript
复制
inception set check_dml_where = 1;

调用示例

goInception延用inception的使用方式,在审核的sql开始前添加注释来指定远端服务器,并在sql的前后添加特殊标识以区分待审核语句,示例如下:

代码语言:javascript
复制
/*--user=root;--password=root;--host=127.0.0.1;--check=1;--port=3306;*/
inception_magic_start;
use test;
create table t1(id int primary key);
inception_magic_commit;

测试案例

1、python测试脚本

代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import pymysql
import prettytable as pt
tb = pt.PrettyTable()

#修改为自己线上服务器连接信息
sql = '''/*--user=root;--password=xxx;--host=xxx;--check=0;--port=3306;--execute=1;--backup=1;*/
inception_magic_start;
use testdb; 
create table t1(id int primary key,c1 int);
insert into t1(id,c1) values(1,1);
inception_magic_commit;'''

conn = pymysql.connect(host='127.0.0.1', user='', passwd='',
                       db='', port=4000, charset="utf8mb4")
cur = conn.cursor()
ret = cur.execute(sql)
result = cur.fetchall()
cur.close()
conn.close()

tb.field_names = [i[0] for i in cur.description]
for row in result:
    tb.add_row(row)
print(tb)

2、执行结果

3、线上库结果

4、备份库结果

参考文献:https://hanchuanchuan.github.io/goInception/zh/

特别感谢inception作者王竹峰老师、goinception作者韩川川老师!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA札记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档