Mysql DBA 自动化运维工具 My_DBA_Release 功能和技术探讨

写这篇博客主要是记录下,My_DBA_Release 这个 Mysql DBA 自动化运维工具,在开发的过程当中的一些思路和里面的一些技术实现,我在自动化工具开发方面,也是新手,欢迎各位大侠共同探讨和拍砖。php

作这个工具,主要是把Mysql DBA的一些例行工做,好比 DML DDL 操做,DB 服务状态查看,DB 用户受权,DB 迁移,搭建DB slave,慢查询日志查询 ,用统一的web 界面,自动化的方式,点点鼠标就完成。css

技术实现上,全python实现,采用python的flask web框架,原来考虑过,php作前端展现的,不过对php不熟,没有必要再去研究一门语言了。Python 的web 框架选择上除了有flask,还有 Django,tornado 等等。查过资料,Django 大而全,紧耦合,没有flask 灵活方便,DB的自动化运维,前端仅仅是个简单展现,主要在后头,没有必要搞那么复杂。tornado 不熟,恰好flask 最近几年蛮火,去哪儿网的自动化运维恰好用的也是flask,最终选择的是Flask,走前辈的路不会错太多,使用这个框架,整体用的过程仍是蛮顺的,中文文档也比较全,连接为:flask中文帮助。其实除了flask,其余web 框架,我也没有用过,欢迎pythoner来拍砖:)html

部署web app,容器选择上,采用简单的gunicorn 来起相应端口,暂时尚未采用Nginx+uWSGI 模式。前端

前端传统的(bootstrap,jquery,ajax)这些,html搭建采用这个bootstrap工具,js方面请教了很多前端的同窗,在前端与后端的交互上,js,json传递上,因为是新手,花费了很多时间。页面初始化时调用模板,后面的按钮点击及下拉列表选择,都是采用ajax来从服务器端返回数据。把十年前,当时玩asp的html的东东,又拾回来了,"Asp" 一会儿暴露年龄了:)。python

下面讲讲后端,这个工具首先能跑起来的基础是:mysql

  1. Mysql的标准化安装,标准化配置,二进制文件目录,data_dir,必须是统一配置的。
  2. 一个数据中心配置库,好比集中的DB实例的注册,DB的注册,权限角色的控制等。

对数据中心的读写,采用python torndb 模块,torndb是对MysqlDB 类的封装,比MysqlDB类使用起来简单多了,推荐你们使用,能够很简单的返回list,dict或者iter,而后jsonfy后,跟前端的ajax进行交互。jquery

对线上数据库基于安全方面的考虑,没有采用mysql -h的方式,远程操做,而是采用paramiko 类(固然fabric也是能够的),基于OS 认证,远程到本机执行相关操做,执行完后,执行结果,不论对错,返回给flask。flask 有app.logger 模块,能够很简单的实现,执行过程当中的日志级别和邮件报警,当执行出错时,发报警邮件给DBA。web

下面介绍各个模块的功能和抓图。ajax

  1. DML/DDL
    请输入图片描述

界面功能比较简单,没有美工,本身搞的,我的感受也比较丑:)。原本这东东是给DBA专门用的,但目前所在公司,算是创业公司,业务尚未成熟,修数太多了,纯靠DBA去修数,不太现实,但又不想让他们用UI工具去直接操做数据库,便把DML的功能,开放给少数几个开发。每一个开发用本身的帐号登陆后,有本身的域权限,只能对相应权限的DB 实例进行操做,固然只能是主库了,后面会考虑在DB 级别甚至表级别设置权限。执行完毕后,都有履历可查,成功或者失败,错误缘由等。
请输入图片描述sql

域和角色及用户的对照关系以下:

  • schema(DB)=> DB实例(IP+DB端口) => 域
  • 用户 => 角色 => 角色域 => 域

安全控制方面,简单的对,delete from ,update set 判断是否有where条件,没有where条件不让执行,固然对DBA角色,那个上面的复选框是可见的。这样多多少少仍是有风险的,正常的大互联网公司,这些操做都是DBA来执行的。

后端操做上,执行的dml命令,paramiko远程传输到本机,转储为文件,而后本机执行,mysql < sql文件来执行dml 命令,原来采用mysql -e 模式,不过 -e 模式对表名的撇号,还须要转义,太麻烦,而< 文件,则没有这种限制。

DBA执行的DDL,比较麻烦,mysql的online ddl,在5.6版本之前 copy table,只读,MDL lock 等等限制,percona的OSCA 和 oak的oak-online-alter-table,在复杂环境(从库,trigger)下都有些多多少少的蛋疼问题。因此这个工具没有考虑那多复杂问题,就是原始的ddl,夜里操做了,只能指望后面升级到5.6或mariadb 10的真正的online ddl了。

2 DB 用户受权

请输入图片描述

界面功能就很少作介绍了,搞DBA的同窗,一看便知,“权限复制到从库”= “set sql_log_bin=1" ,下拉列表的数据,都是从数据中心配置表加载的。跟上面同样,grant语句转储为文件,在本机执行。

”查看当前DB实例的全部DB权限“ = percona工具的pt-show_grants --ignore=‘系统自带的帐号’,剩余所有都是应用帐号

”查看当前被受权人的DB权限“ = percona工具的pt-show_grants --only=

没有写完,后续。。。。。

相关文章
相关标签/搜索