检查数据库各个系统状态
# -*- coding: utf-8 -*-
'''
Created on 2014年11月25日

@author: wangjunji
@deprecated: check db status 
@summary: table tables db statment
'''
import sys
import MySQLdb
import os
import ConfigParser
config = ConfigParser.ConfigParser()
config.read("test.propties")
db_ip = config.get("CONF", "db_ip")
db_username = config.get("CONF", "db_username")
db_userpassword = config.get("CONF", "db_userpassword")
db_name = config.get("CONF", "db_name")
db_time_begin = config.get("CONF", "db_time_begin")
db_time_end = config.get("CONF", "db_time_end")


host = db_ip
user = db_username
passwd = db_userpassword
db = db_name


try:
    mydb = MySQLdb.connect(host, user, passwd)
    cursor = mydb.cursor()
    statement = "USE %s" % (db)
    cursor.execute(statement)
except MySQLdb.Error, e:
    print "There was a problem in accessing the database %s with the credentials you provided.  Please check the privileges of the user account and retry.  The error and other debugging information follow below.\n\n%s" % (db, e)


class Database:
    def __init__(self):
        "A class representation for MySQL database metadata"
        self.database = []

    # Execute straightforward queries
    def fetchquery(self, statement):
        "Internal method that takes a statement and executes the query, returning the results"
        try: 
            runit = cursor.execute(statement)
            results = cursor.fetchall()
        except MySQLdb.Error, e: 
            results = "The query you attempted failed.  Please verify the information you have submitted and try again.  The error message that was received reads: %s" % (e)
        return results

    def tables(self):
        "Returns a list of the database tables"
        statement = "SHOW TABLES"
        header = ("Tables")
        results = self.fetchquery(statement)
        return header, results

    def tbstats(self):
        "Returns the results of TABLE STATUS for the current db"
        header = ("Name", "Engine", "Version", "Row_format", "Rows", "Avg_row_length", "Data_length", "Max_data_length", "Index_length", "Data_free", "Auto_increment", "Create_time", "Update_time", "Check_time", "Collation", "Checksum", "Create_options", "Comment")
        statement = "SHOW TABLE STATUS"
        results = self.fetchquery(statement)
        return header, results

    def describe(self, tablename):
        "Returns the column structure of a specified table"
        header = ("Field", "Type", "Null", " Key", "Default", "Extra")
        statement = "SHOW COLUMNS FROM %s" % (tablename)
        results = self.fetchquery(statement)
        return header, results

    # Retrieve CREATE statements 
    def getcreate(self, type, name):
        "Internal method that returns the CREATE statement of an object when given the object type and name"
        statement = "SHOW CREATE %s %s" % (type, name)
        results = self.fetchquery(statement)
        return results
    def dbcreate(self):
        "Returns the CREATE statement for the current db"
        type = "DATABASE"
        name = db
        header = ("Database", "Create Database")
        results = self.getcreate(type, name)
        return header, results
    def tbcreate(self, tbname):
        "Returns the CREATE statement for a specified table"
        type = "TABLE"
        header = ("Table, Create Table")
        results = self.getcreate(type, tbname)
        return header, results        

def resproc(finput):
    "Compiles the headers and results into a report"
    header = finput[0]
    results = finput[1]

    output = {}
    c = 0
    for r in xrange(0, len(results)):
        record = results[r]
        outrecord = {}

        for column in xrange(0, len(header)):
            outrecord[header[column]] = record[column]
        output[str(c)] = outrecord
        c += 1
    
    orecord = ""
    for record in xrange(0, len(results)):
        record = str(record)
        item = output[record]
        for k in header:
            outline = "%s : %s\n" % (k, item[k])
            orecord = orecord + outline
        orecord = orecord + '\n\n'
    return orecord
            
            
def main():
    mydb = Database()
    tables = mydb.tables()
    # print tables
    print "Tables of %s" % (db)
    for c in xrange(0, len(tables[1])):
        print tables[1][c][0]
    print '\n\n' 
         
    tablestats = mydb.tbstats()
    print "Table Statuses"
    print resproc(tablestats)
    print '\n\n'
 
    dbcreation = mydb.dbcreate()
    print "Database CREATE Statement"
    print resproc(dbcreation)
    print '\n\n'

if __name__ == '__main__':
    main()


数据库状态检查