DBA自己做管理平台--django admin实践

 欢迎转载,请注明出处,谢谢
作者:刘春雷
欢迎评论,感谢~                                    
------------------------------------------------------
概要:
     DBA自己搭建管理平台。
如果你想快速达到自动化,没有开发支持你做前端的话,那么此篇文章适合你~
如果你只会mysql,python等的话,那么此篇文章适合你~
如果你想学习django admin的话,此篇文章适合你~
                                                                    --刘春雷


                                                      DBA自己做管理平台 -- django admin实践 
                                                                                                                                                           -- 20170621 刘春雷

一、说明

1.1、说明

如果你去了一个大公司,例如百度,阿里等,那么请忽略~本人不才,没法写那么牛的管理平台~
如果你去了一个中小型公司做DBA,没有人(开发)帮你做DBA管理平台,并且你还是个积极的娃,那么恭喜你,这篇文章适合你~
如果你是一个玩python的DBA,java不会,那么这篇文章适合你~
如果你想了解django,那么这篇文章适合你~
为什么要自己做
<1>没有开发帮忙(扎心不,老铁)
<2>方便接后台任务
<3>方便走python系(python运维方便)
<4>快速自动化,减少手动情况;
<5>方便快速标准化
<6>方便调整,例如添加字段等需求
<7>老板要求

1.2、需求

<1>DBA技能点:mysql,python,django 
<2>为了平台化管理mysql元信息
<3>为了实现自动化,实现元信息与后台任务的关联
<4>为了标准化

二、django介绍

此处只是简单介绍,想要了解更多,推荐自学django~

2.1、什么是django

开放源代码的 Web应用框架 ,由Python语言编写

2.2、mvc介绍

MVC:全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。      

  模型(model):定义数据库相关的内容,一般放在models.py文件中。

  视图(view):定义HTML等静态网页文件相关,也就是那些html、css、js等前端的东西。

  控制器(controller):定义业务逻辑相关,就是你的主要代码。

注:

django的view可以为业务逻辑,相当于控制器

html被放在Templates中,称作模板  


2.3、django admin


Django Admin 管理工具,django帮你做好了一些节目及逻辑等,自己可根据业务逻辑进行使用,方便DBA上手

三、平台具体实现

3.1、平台整体架构

前端,提交修改表单,将任务记录到任务表
mysql_auto消费任务即可
相对比较简单,DBA会一些django,python即可快速部署一套dba管理平台
 

3.2、平台多表元信息架构


3.3、界面情况



1、集群拓扑(mysql_cluster_style)
功能简述:集群拓扑
2、服务器(my_server)
功能简述:管理服务器信息
3、集群(my_cluster)
功能简述:管理集群信息
4、实例(my_db)
功能简述:管理实例信息
5、数据库(my_database)
功能简述:管理数据库信息
6、用户(my_database_user)
功能简述:管理数据库用户信息
7、域名(my_domain)
功能简述:管理域名信息
8、数据库备份任务(my_backup_task)
功能简述:管理备份任务
9、数据库备份记录(my_backup_info)
功能简述:管理备份记录信息

3.4、mysql表情况


3.5、后台任务情况

3.5.1、任务表my_oper_queue

利用admin.py,来达到 界面操作的相应情况,落表my_oper_queue表,即任务表
此时,可以利用任务程序,mysql_auto,来自动消费任务
后台任务包括:
create_master   创建主库
create_slave      创建从库
flush_ip_domain  刷新域名IP关系
create_database  创建数据库
create_database_user  创建数据库用户
grant_for_dev             用户授权
.......
 

3.5.2、自动任务

mysql_auto程序来消费任务表的数据,根据不同的command情况来做相应操作
功能介绍:
<1>创建主库
根据任务表的create_master进行创建主库,支持5.5,5.7版本
<2>创建从库
检查备份情况,有备份即利用备份进行恢复,无备份则进行一次备份进行恢复
<3>刷新域名
刷新域名与IP关系
<4>创建数据库
根据create_database来创建数据库
<5>创建用户
根据create_database_user来创建用户
<6>授权用户
根据 grant_for_dev来授权用户
........
 

四、具体搭建

4.1、软件及环境情况

django版本1.10.5
python2.7
mysql5.7.15
django测试数据库一个

4.2、部署

<1>、安装python2.7 省略
<2>、安装MySQLdb模块 省略
<3>、软链
 ln -s  /usr/local/mysql/lib/libperconaserverclient.so  /usr/lib64/libperconaserverclient.so
<4>、yum问题
vi /usr/bin/yum
#!/usr/bin/python2.6    改成这样
<5>、安装pymysql
rz -be PyMySQL-0.7.4.zip
unzip  PyMySQL-0.7.4.zip
python setup.py install
<6>安装django忽略,自行百度~
<7>安装mysql,此处省略

4.3、django相关

代码地址
/data/mysql_admin/
4.3.1、配置setting.py
vi /data/mysql_admin/mysql_admin/settings.py

ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATE_DIRS = (
'/data/mysql_admin/mysql_admin/templates',
)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'my',
        'USER': '***',                      # Not used with sqlite3.
        'PASSWORD': '***',                  # Not used with sqlite3.
        'HOST': '10.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '8001',                      # Set to empty string for default. Not used with sqlite3.
    }
}

4.3.2、修改__init__.py 文件

 vi  __init__.py
import pymysql
pymysql.install_as_MySQLdb()

4.3.3、创建modle
cd /data/mysql_admin
python manage.py startapp  my


4.3.4、修改setting文件

添加my

vi  mysql_admin/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ' my',
]

4.3.5、修改model文件
 cd /data/mysql_admin/
vi  my/models.py
#-*- encoding: utf-8 -*-
#!/bin/env python
from __future__ import unicode_literals

from django.db import models
class server(models.Model):
    serv_ip = models.GenericIPAddressField('服务器IP',max_length=15,default='',unique=True)
    serv_ip2 = models.GenericIPAddressField('服务器IP2',max_length=15,default='',unique=True)
    hostname = models.CharField('主机名',max_length=70,default='')
    valid = models.CharField('是否有效',choices=(('1','有效'),('0','无效')),max_length=2,default=1)
    idc = models.CharField('IDC',choices=(('idc1','第一机房'),('idc2','第二机房')), max_length=32 )
    create_time = models.DateTimeField('添加时间',  blank=True,default=datetime.datetime.now)
    modify_time = models.DateTimeField('修改时间',blank=True,default=datetime.datetime.now)
    machine_type = models.CharField('机器套餐',max_length=50,blank=True,null=True)
    def __unicode__(self):
        return self.serv_ip
    class Meta:
        verbose_name = 'server'
        verbose_name_plural = '[01]服务器信息   (my_server)'
        ordering = ['ip']


4.3.6、修改admin文件
[root@sjs_111_161 MySQL_Model]# pwd
/data/mysql_admin/my

vi admin.py 
from django.contrib import admin
from my.models import *
import string
import os,sys
import django.forms

class ServerAdmin(admin.ModelAdmin):
    actions = ('reload_server_stat',)
    search_fields = ('serv_ip','hostname','idc')
    list_display = ('serv_ip',
            'serv_ip2',
            'hostname',
            'idc',
            'valid',
            'create_time',
            'modify_time',
            'machine_type'
            )
    fieldsets=(
        ('',{
        'fields':(
            'serv_ip',
            'serv_ip2',
            'hostname',
            'idc',
            'valid',
            'machine_type'
            )
        }),
        )

admin.site.register(server,ServerAdmin)

4.3.7、创建表
python manage.py migrate  
System check identified some issues:

WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK

4.3.8、创建super用户
密码 test
[
 python manage.py createsuperuser
System check identified some issues:

WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.
Username (leave blank to use 'root'): admin
Email address: liuchunlei@qq.com
Password: 
Password (again): 
Superuser created successfully.


4.3.9、开启
python manage.py  runserver 10.0.0.1:8001
Performing system checks...

System check identified some issues:

WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.

System check identified 1 issue (0 silenced).
February 07, 2017 - 04:13:48
Django version 1.10.5, using settings 'mysql_admin.settings'
Starting development server at http://10.0.0.1:8001/
Quit the server with CONTROL-C.

4.3.10、访问
浏览器访问: 10.10.0.1:8001/admin
输入admin/test


注:只是举例说明大致如何创建表与界面的这种关系等,其他以此类推即可~ 

4.3.11、创建迁移脚本

如果修改了 models.py,要应用变化到数据库,操作如下:
发现变化
python manage.py makemigrations my
同步数据
[root@sjs_111_161 mysql_admin]#  python manage.py migrate my
System check identified some issues:

WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.
Operations to perform:
  Apply all migrations: MySQL_Model
Running migrations:
   Applying MySQL_Model.0001_initial... OK

4.3.12、操作及查看

在mysql上查看表的情况

 
  查看建表语句:
show create table my_server

CREATE TABLE `my_server` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` char(39) NOT NULL,
  `hostname` varchar(50) DEFAULT NULL,
  `valid` varchar(2) DEFAULT NULL,
  `idc` varchar(32) NOT NULL,
  `create_time` datetime(6) NOT NULL,
  `modify_time` datetime(6) NOT NULL,
  `machine_type` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ip` (`ip`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

页面添加数据
 
数据库查看
 

五、models.py  相关

此脚本为django的表结构模板

5.1、models.py  相关

(1)、更改默认表名
class Meta:
         verbose_name = 'Server'
        verbose_name_plural = '[0]服务器Server'
 
(2)、下拉框
IntegerField  (值,显示)
add_user_id = models.IntegerField('添加DBA',choices=((0,'迪丽热巴'),(1,'baby'),(2,'范冰冰'),(3,'刘春雷')))
(3)、字段类型

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28823725/viewspace-2141094/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28823725/viewspace-2141094/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值