怅然|mysql管理员审核SQL的必备利器,背锅概率至少下降50%


怅然|mysql管理员审核SQL的必备利器,背锅概率至少下降50%goinception简介使用过inception的人对SQL审核这块获取都比较熟悉 , 作为DBA , 审核SQL是日常工作中的很重要的一块内容 , 审核好SQL对于后期项目以及数据库维护上起着至关重要的作用 , 好比一座大厦没有坚实的地基支撑 , 也就无法长期屹立不倒 。
goInception是一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具 ,通过对执行SQL的语法解析 , 返回基于自定义规则的审核结果 , 并提供执行和备份及生成回滚语句的功能 。
【怅然|mysql管理员审核SQL的必备利器,背锅概率至少下降50%】goinception的架构:
怅然|mysql管理员审核SQL的必备利器,背锅概率至少下降50%从架构上来说 , goinception简直跟inception一模一样 , SQL提交到goinception , goinception连接到线上MySQL进行审核 。 执行的时候也是连接到线上MySQL进行执行 , 不同的是goinception提供了备份、回滚的功能 , 意思就是能够监听执行期间的binlog , 基于binlog生成反向的回滚SQL 。
安装测试下载、安装官方提供了二进制包 , 简直安装部署的一大福利 。 下载地址:下载好对应版本的goinception , 直接解压即可 , 解压完成以后在config/config.toml.default有一个默认的配置文件 , 大概意思也写得比较清楚了 , 那我修改的部分已经写在下面的配置文件中了 , 其他部分我都没有修改
# 日志文件[log.file]filename = "/opt/goinception/logs/goinception.log"max-days = 7max-backups = 7[inc]backup_host = "xxxx"backup_port = 3306backup_user = "goinception"backup_password = "goinception"sql_safe_updates = 1lang = "zh-CN"[osc]osc_min_table_size = 1024[ghost]ghost_on = trueghost_chunk_size = 10000ghost_dml_batch_size = 100那么 , 我们启动goinception
./goInception -config=config/config.toml--tt-darkmode-color: #A3A3A3;">启动以后 , 我们可以看到端口4000已经启动监听了
[root@VM_0_9_centos ~]# netstat -lntp|grep 4000tcp600 :::4000:::*LISTEN31404/./goInception测试goinception可以沿用inception的调用方法 , 示例如下:
/*--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;那么我们构建一个python脚本来进行测试:
#!/usr/bin/env python3# -*- coding:utf-8 -*-import pymysqlimport prettytable as pttb = pt.PrettyTable()sql = '''/*--user=xucl;--password=xuclxucl123;--host=127.0.0.1;--check=1;--port=3308;*/inception_magic_start;use sbtest;create table t1(id int primary key,c1 int, c2 int);insert into t1(id,c1,c2) values(1,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)执行后输出如下:
怅然|mysql管理员审核SQL的必备利器,背锅概率至少下降50%可以看到审核结果还是非常清晰的那如果需要执行的话怎么做呢?我们只需要修改示例中的头部 , 将--check=1改成--execute=1即可


推荐阅读