MySQL自动化运维工具

数据字典DDM:查看DB表结构和字段的,应用开发人员使用的,参考设计时
数据执行:写SQL语句的dml ,数据库人员给开发人员使用,执行语句、线上调试,发现数据问题,技术支持, 数据查看工具。ctrip和gd都有,phpMyAdmin
数据DDL表结构评审和管理:提交给DBA进行审核,一般是ddl语句,一个集审核、执行、备份及生成回滚语句于一身的MySQL自动化运维工具。DBA自己开发的一个工具,给开发人员使用。

====================

 

  • Inception: 去哪儿网开源,提供SQL语句审核、执行、回滚功能 ,2015年
  • SQLAdvisor: 美团开源,提供分析SQL中的where条件、聚合条件、多表Join关系,输出索引优化建议,2017年
  • SOAR: 小米开源,提供SQL启发式算法的语句优化、多列索引优化等功能,2018年
  •  
  •  
  • =======================

 

https://github.com/jly8866/archer

https://github.com/cookieY/Yearning

 

======================

Yearning SQL审核平台

LICENSE LICENSE      

MYSQL web端 SQL审核平台。

Website 官网

www.yearning.io

Feature 功能

  • SQL查询
    • 查询工单
    • 导出
    • 自动补全,智能提示
    • 查询语句审计
  • SQL审核
    • 流程化工单
    • SQL语句检测与执行
    • SQL回滚
    • 历史审核记录
  • 推送
    • E-mail工单推送
    • 钉钉webhook机器人工单推送
  • 用户权限及管理
    • 拼图式权限划分
    • 组合式权限组
    • 支持限制邮箱后缀名的有限注册功能
  • 其他
    • todoList
    • LDAP登录
    • 动态配置

Install 安装及使用日志

使用及安装文档

=====================

Snapshot 效果展示

  • Login

login

  • Dashboard

  • 审核

  • SQL语法高亮及自动补全

  • 查询

  • 细粒度的权限分配 

  • 我的工单 

===============================

http://guide.yearning.io/

 

archer

基于inception的自动化SQL操作平台,支持工单、审核、定时任务、邮件、OSC等功能,还可配置MySQL查询、慢查询管理、会话管理等


目录

开发语言和推荐环境

python3.4及以上  
django1.8.17  
mysql : 5.6及以上  
linux : 64位linux操作系统均可  

主要功能

  • 自动审核
    发起SQL上线,工单提交,由inception自动审核,审核通过后需要由审核人进行人工审核
  • 人工审核
    inception自动审核通过的工单,由其他研发工程师或研发经理来审核,DBA操作执行SQL
    为什么要有人工审核?
    这是遵循运维领域线上操作的流程意识,一个工程师要进行线上数据库SQL更新,最好由另外一个工程师来把关
    很多时候DBA并不知道SQL的业务含义,所以人工审核最好由其他研发工程师或研发经理来审核. 这是archer的设计理念
  • 回滚数据展示
    工单内可展示回滚语句,支持一键提交回滚工单
  • 定时执行SQL
    审核通过的工单可由DBA选择定时执行,执行前可修改执行时间,可随时终止
  • pt-osc执行
    支持pt-osc执行进度展示,并且可以点击中止pt-osc进程
  • MySQL查询
    库、表、关键字自动补全
    查询结果集限制、查询结果导出、表结构展示、多结果集展示
  • MySQL查询权限管理
    基于inception解析查询语句,查询权限支持限制到表级
    查询权限申请、审核和管理,支持审核流程配置,多级审核
  • MySQL查询动态脱敏
    基于inception解析查询语句,配合脱敏字段配置、脱敏规则(正则表达式)实现敏感数据动态脱敏
  • 慢日志管理
    基于percona-toolkit的pt_query_digest分析和存储慢日志,并在web端展现
  • 邮件通知
    可配置邮件提醒,对上线申请、权限申请、审核结果等进行通知
    对异常登录进行通知

设计规范

  • 合理的数据库设计和规范很有必要,尤其是MySQL数据库,内核没有oracle、db2、SQL Server等数据库这么强大,需要合理设计,扬长避短。互联网业界有成熟的MySQL设计规范,特此撰写如下。请读者在公司上线使用archer系统之前由专业DBA给所有后端开发人员培训一下此规范,做到知其然且知其所以然。
    下载链接 https://github.com/jly8866/archer/blob/master/src/docs/mysql_db_design_guide.md

主要配置文件

  • archer/archer/settings.py

采取docker部署

手动安装步骤

  1. 环境准备
  • 克隆代码到本地或者下载zip包
    git clone https://github.com/jly8866/archer.git
  • 安装inception
    项目地址
  1. 安装python3,版本号>=3.4(由于需要修改官方模块,请使用virtualenv或venv等单独隔离环境!)
    pip3 install virtualenv
    virtualenv venv4archer --python=python3.4
    
  2. 安装所需相关模块
    source venv4archer/bin/activate
    pip3 install -r requirements.txt
    
  3. pymysql模块兼容inception版本信息
    使用src/docker/pymysql目录下的文件替换/path/to/python3/lib/python3.4/site-packages/pymysql/对应文件

启动前准备

  1. 创建archer本身的数据库表
  • 修改archer/archer/settings.py所有的地址信息,包括DATABASES和INCEPTION_XXX部分
  • 通过model创建archer本身的数据库表,如果是现有版本升级请使用src/init_sql内的变更脚本变更数据库
    原v1.1.1分支请使用v1.1.1->v2.0.sql变更
    原master分支请使用master->v2.0.sql变更
    全新安装请使用如下方式初始化
    python3 manage.py makemigrations sql  
    python3 manage.py migrate 
    
  1. 创建admin系统root用户(该用户可以登录django admin来管理model)
    python3 manage.py createsuperuser
  2. 启动,有两种方式
    (1)用django内置runserver启动服务,建议不要在生产环境使用
    bash debug.sh
    (2)用gunicorn+nginx启动服务
    安装模块pip3 install gunicorn==19.7.1
    nginx配置示例
    server{
            listen 9123; #监听的端口
            server_name archer;
            proxy_read_timeout 600s;  #超时时间与gunicorn超时时间设置一致,主要用于在线查询
    
            location / {
              proxy_pass http://127.0.0.1:8888;
              proxy_set_header Host $host:9123; #解决重定向404的问题
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
            }
    
            location /static {
              alias /archer/static; #此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        } 
    
    启动 bash startup.sh
  3. 正式访问
    使用上面创建的管理员账号登录http://X.X.X.X:port/login/

其他功能集成

在线查询

  1. settings中QUERY改为True
  2. 到【后台数据管理】-【从库地址配置】页面添加从库信息
  3. 到【后台数据管理】-【工作流配置】页面配置审核流程
  4. 用户申请权限、审核通过后即可进行在线查询
  5. 如需要使用动态脱敏,请将settings中DATA_MASKING_ON_OFF改为True,并且到【后台数据管理】-【脱敏配置】页面配置脱敏规则和字段

慢日志管理

  1. settings中SLOWQUERY改为True
  2. 安装percona-toolkit(版本=3.0.6),以centos为例
    yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm 
    yum -y install percona-toolkit.x86_64 
    
  3. 使用src/script/mysql_slow_query_review.sql创建慢日志收集表到archer数据库
  4. 将src/script/analysis_slow_query.sh部署到各个监控机器,注意修改脚本里面的 hostname="${mysql_host}:${mysql_port}"与archer主库配置信息一致,否则将无法筛选到相关记录

SQLAdvisor优化工具

  1. 安装SQLAdvisor,项目地址
  2. 修改配置文件SQLADVISOR为程序路径,路径需要完整,如'/opt/SQLAdvisor/sqladvisor/sqladvisor'

阿里云rds管理

  1. 修改配置文件ALIYUN_RDS_MANAGE=True
  2. 安装模块
    pip3 install aliyun-python-sdk-core==2.3.5
    pip3 install aliyun-python-sdk-core-v3==2.5.3
    pip3 install aliyun-python-sdk-rds==2.1.1
    
  3. 在【后台数据管理】-【阿里云认证信息】页面,添加阿里云账号的accesskey信息,重新启动服务
  4. 在【后台数据管理】-【阿里云rds配置】页面,添加实例信息,即可实现对阿里云rds的进程管理、慢日志管理

admin后台加固,防暴力破解

  1. patch目录下,名称为django_1.8.17_admin_secure_archer.patch
  2. 使用命令
    patch  python/site-packages/django/contrib/auth/views.py django_1.8.17_admin_secure_archer.patch
    

集成ldap

  1. 修改配置文件ENABLE_LDAP=True,安装相关模块,可以启用ldap账号登录,以centos为例
    yum install openldap-devel
    pip install django-auth-ldap==1.3.0
    
  2. 如果使用了ldaps,并且是自签名证书,需要打开settings中AUTH_LDAP_GLOBAL_OPTIONS的注释
  3. settings中以AUTH_LDAP开头的配置,需要根据自己的ldap对应修改

系统体验

点击体验

角色账号密码
管理员archerarcher
工程师engineerarcher
审核人auditorarcher
DBAdbaarcher

部分问题解决办法

查看错误日志

/tmp/default.log & /tmp/archer.err

页面样式显示异常

  • runserver/debug.sh启动
    settings里面关闭了debug,即DEBUG = False,需要在启动命令后面增加 --insecure,变成
  • nginx+gunicorn/startup.sh启动
    nginx的静态资源配置不正确
    location /static {
                  alias /archer/static; #此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源,一般默认为archer按照目录下的static目录
                }
    

用户管理

  • 偶现添加用户报错
    采用nginx+gunicorn/startup.sh启动,多worker的部署可能出现,目前问题没有解决
  • 无法登录(确认用户名和密码正确)
    检查用户is_active字段是否为1

SQL上线

  • 集群不显示数据库
    archer会默认过滤一些系统数据库,过滤列表为'information_schema', 'performance_schema', 'mysql', 'test', 'sys'

  • 审核人不显示
    没有为审核人/DBA角色的有效用户

  • 审核通过后没有执行按钮
    archer的SQL上线流程为:工程师提交SQL->审核人审核->DBA执行,审核人只能审核归属自己审核的数据,DBA执行全部数据

检测SQL报错

  • invalid literal for int() with base 10:'Inception2'
    调整pymysql使其兼容Inception版本信息,
    使用src/docker/pymysql目录下的文件替换/path/to/python3/lib/python3.4/site-packages/pymysql/目录下的文件
  • invalid source infomation
    inception用来审核的账号,密码不能包含*
  • Must start as begin statement
    python3的pymysql模块会向inception发送SHOW WARNINGS语句,导致inception返回一个"Must start as begin statement"错误被archer捕捉到报在日志里
    使用src/docker/pymysql目录下的文件替换/path/to/python3/lib/python3.4/site-packages/pymysql/目录下的文件
  • Incorrect database name ''
    inception检查不支持子查询
  • Invalid remote backup information
    inception无法连接备份库

无法生成回滚语句

  • 检查配置文件里面inception相关配置
  • 检查inception审核用户和备份用户权限,权限参考
    — inception备份用户
    GRANT SELECT, INSERT, CREATE ON *.* TO 'inception_bak'
    — inception审核用户(主库配置用户,如果要使用会话管理需要赋予SUPER权限,如果需要使用OSC,请额外配置权限)
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'inception'
    — archer在线查询用户(从库配置用户)
    GRANT SELECT ON *.* TO 'archer_read'
    
  • 检查binlog格式,需要为ROW,binlog_row_image为FULL
  • 检查DML的表是否存在主键
  • 检查语句是否有影响数据
  • 检查备份库是否开启autocommit
  • 检查是否为连表更新语句
  • 检查执行实例是否为mysql

脱敏规则未生效

  • 检查脱敏字段是否命中(是否区分大小写)
  • 检查脱敏规则的正则表达式是否可以匹配到数据,无法匹配的会返回原结果
  • 检查是否关闭了CHECK_QUERY_ON_OFF参数,导致inception无法解析的语句未脱敏直接返回结果
    脱敏规则配置参考
规则类型规则脱敏所用的正则表达式,表达式必须分组,隐藏的组会使用****代替需要隐藏的组规则描述
手机号(.{3})(.*)(.{4})2保留前三后四
证件号码(.*)(.{4})$2隐藏后四位
银行卡(.*)(.{4})$2隐藏后四位
邮箱(.*)@(.*)2去除后缀

审核人看不到查询权限申请待审核工单

查询权限申请待办列表被隐藏至右上角的消息图标中,当有待审核信息时会显示图标,可以进入查看待办数据

慢日志不显示

  • 检查脚本内的配置,hostname和archer主库配置内容保持一致,用于archer做筛选
  • 检查mysql_slow_query_review_history表收集的日志信息hostname_max是否和hostname一致

定时任务未执行

  • 检查django-apscheduler相关表是否有创建,可使用python3 manage.py migrate创建

联系方式

QQ群524233225

 

======================

See SQL审核平台

See SQL审核平台

         

API集成

  • Inception: 去哪儿网开源,提供SQL语句审核、执行、回滚功能
  • SQLAdvisor: 美团开源,提供分析SQL中的where条件、聚合条件、多表Join关系,输出索引优化建议
  • SOAR: 小米开源,提供SQL启发式算法的语句优化、多列索引优化等功能

功能简介

  • 目标库管理

    • 支持多场地/数据中心的数据库管理,集群方式归纳目标数据库
    • 支持目标数据库配置,库/表结构查询
  • SQL操作

    • 基于Inception
    • SQL语法检测
    • SQL语句执行
    • SQL回滚
    • 定时工单
    • 历史记录
  • SQL查询

    • 查询目标数据库的详细表结构
    • 查询表数据,对结果可导出文件
    • SQL语句优化(基于美团SQLAdvisor)
    • 多层次优化建议(基于小米SOAR)
  • 用户管理

    • 对用户/组的注册/注销/加组/授权等管理
  • 个性化设置

    • 管理员可以做SQL关键字拦截,平台的审批功能开关等设置
    • 用户可以订阅其常用的数据库,指定审批工单的经理,以简化审核时所需的操作
  • inception设置

    • inception服务连接信息
    • inception备份库连接信息
    • inception支持的参数释义及值
  • 人工审批功能

    • 流程开关
    • 开启流程,工单至少需双人确认(流程:提交人 -- inception自动审核 -- 经理审批 -- DBA上线)
    • 关闭流程,工单可由经理上线(流程:提交人 -- inception自动审核 -- 经理上线)
  • 用户权限

    • 基于RBAC的表级,对象级权限控制体系
    • 通过用户管理设置用户权限
    • 根据用户身份(组员/经理/总监)鉴权用户对SQL的审核/取消/执行/回滚等操作
  • 操作流程

    • 用户需要输入SQL,指定环境,执行人,数据库
    • inception自动审核SQL语法
    • 审批人做审批通过或驳回操作
    • 执行人做执行/撤销/回滚等操作
    • SQL列表界面提供SQL查询,操作等相关功能
  • API文档

    • 各接口生成自动化的API文档,对接外部需求
  • 登录

    • 支持see系统登录
    • 支持自定义公司统一认证中心(sso)登录
  • 通知

    • E-mail邮件推送
  • 其他

    • DashBoard数据报表展示

环境

  • Python 3.6

    • Django 2.0
    • Django Rest Framework 3.8
  • Vue.js 2.9

    • iview 2.8
    • iview-admin 1.3

平台使用

用户名密码
武松see
宋江see

安装文档

界面展示

  • 邮件提醒

image

  • SQL查询

image

  • 工单审核

image

  • 工单详情 1

image

  • 工单详情 2

image

  • 工单详情 3

image

  • 工单列表

image

  • 平台设置

image

  • 用户管理

image

  • Dashboard审计

image

交流学习

  • QQ群 630791951

License

  • Eclipse Public License - v 2.0

Copyright © 2018 See

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值