赞
踩
自动监控mysql表结构变更脚本
摘要: 如何监控MySQL数据库表结构和表变更,并通知到相关的联系人、实现报警或通知? 由于平台采用django系统实现,因此通过如下代码实现(代码low,也可以写成python文件,传参数执行): 简单思路: 对用户指定库的所有列值进行md5,并存储到本地数据库,每次定时执行,校对md5,并找出不匹配的进行判断 会自动找出新增、删除、变更表结构的表# models.
如何监控MySQL数据库表结构和表变更,并通知到相关的联系人、实现报警或通知?
由于平台采用django系统实现,因此通过如下代码实现(代码low,也可以写成python文件,传参数执行):
简单思路:
对用户指定库的所有列值进行md5,并存储到本地数据库,每次定时执行,校对md5,并找出不匹配的进行判断
会自动找出新增、删除、变更表结构的表
# models.py
class MonitorSchema(models.Model):
table_schema = models.CharField(null=False, max_length=512)
table_name = models.CharField(null=False, max_length=512)
table_stru = models.TextField(null=False, default='')
md5_sum = models.CharField(null=False, max_length=256)
class Meta:
verbose_name = u'监控表结构变更表'
verbose_name_plural = verbose_name
permissions = ()
db_table = "dbaudit_monitor_schema"
# tasks.py
import datetime
import hashlib
import difflib
import mysql.connector as mdb
from celery import shared_task
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from auditdb.settings import EMAIL_FROM
@shared_task
def schema_modify_monitor(**kwargs):
check_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
conn = connect_db(**kwargs)
cursor = conn.cursor(dictionary=True)
query_info = "select table_schema,table_name,group_concat(COLUMN_NAME) as column_name," /
"group_concat(COLUMN_DEFAULT) as column_default,group_concat(IS_NULLABLE) as is_nullable," /
"group_concat(DATA_TYPE) as data_type,group_concat(CHARACTER_MAXIMUM_LENGTH)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。