欢迎转载,请注明出处,谢谢
作者:刘春雷
欢迎评论,感谢~
------------------------------------------------------
概要:
DBA自己搭建管理平台。
如果你想快速达到自动化,没有开发支持你做前端的话,那么此篇文章适合你~
如果你只会mysql,python等的话,那么此篇文章适合你~
如果你想学习django admin的话,此篇文章适合你~
--刘春雷
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>方便接后台任务
<3>方便走python系(python运维方便)
<4>快速自动化,减少手动情况;
<5>方便快速标准化
<6>方便调整,例如添加字段等需求
<7>老板要求
1.2、需求
<1>DBA技能点:mysql,python,django
<2>为了平台化管理mysql元信息
<3>为了实现自动化,实现元信息与后台任务的关联
<4>为了标准化
<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>创建用户
<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/