mysql检测性能的脚本

之前根据一个脚本文件,写了一个python的检测脚本。写的很久了,代码可以优化的地方有很多,不过还可以使用。

#!/usr/bin/env python
import os
import sys
import time
import string
import re
import pwd
import subprocess
import commands
import getpass
debug=0

text_color={
    'black':'\033[0m',
    'boldblack':'\033[1;0m',
    'red':'\033[31m',
    'boldred':'\033[1;31m',
    'green':'\033[32m',
    'boldgreen':'\033[1;32m',
    'yellow':'\033[33m',
    'boldyellow':'\033[1;33m',
    'blue':'\033[34m',
    'boldblue':'\033[1;34m',
    'magenta':'\033[35m',
    'boldmagenta':'\033[1;35m',
    'cyan':'\033[36m',
    'boldcyan':'\033[1;36m',
    'white':'\033[37m',
    'boldwhite':'\033[1;37m'
    }


'''
The Script for Log File.The Log File = "/var/log/message"
'''
def log_func(msg):
     msg=str(msg)
     logfile=open("/var/log/mysql","a")   
     logtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
     ftime=("***   %-63s***" % logtime)
     logfile.write(ftime)
     logfile.write("\n")
     logfile.write(msg)
     logfile.write("\n")
     logfile.close()
global logfile
env = os._Environ(os.environ)
logfile = env.get("LOGFILE")
def execute_command(command_args,user=None,env=None):
    global logfile
    ret = -1
    res = []
    curdir = os.getcwd()
    if user is None:
        homedir = pwd.getpwuid(os.getuid())[5]
    else:
        try:
            int(user)
            homedir = pwd.getpwuid(int(user))[5]
        except:
            try:
                homedir = pwd.getpwnam(user)[5]
            except:
                homedir = pwd.getpwuid(os.getuid())[5]

    subproc_args = { 'stdin': subprocess.PIPE,
                     'stdout': subprocess.PIPE,
                     'stderr': subprocess.STDOUT,
#                     'shell': True,
                     'cwd': homedir,
                     'close_fds': True,
                   }

    if env is not None:
        subproc_args['env'] = env
       
    if logfile is None:
        logfile = "/dev/null"

    logf = open(logfile, "a")
    try:
        pp = subprocess.Popen(command_args, **subproc_args)
        logf.write("Exec: '%s'\n" % (command_args))
    except OSError:
        logf.write("Exec: '%s' failed.\n" % (command_args))
        logf.close()
        return [ret,res]
    (stdouterr, stdin) = (pp.stdout, pp.stdin)
    while True:
        line = stdouterr.readline()
        ##logf.write(line)
        if not line:
            break
        line = line.rstrip()
        res.append(line)
    ret = pp.wait()
    logf.close()
    return [ret,res]
'''
The Script for set color for print text on terminal
'''
class setColor(object):
    def __init__(self):
        self.message="No message passed."
        self.color="black"
    def text_fun(self,message="No message passed.",color="black"):
        self.color=color
        self.msg=message
        try:
            os.system("tput sgr0")
            print text_color[self.color]
            print ("%s" % self.msg)
            os.system("tput sgr0")
        except Exception ,e:
            print ("%s" % self.msg)
            log_func(e)
    def text_banner(self):
        msg='''
    -----------------------------------------------------	
    -- SElinux+ MYSQL Performance Tunning Script --
    -----------------------------------------------------
                                           -by qfong       
            '''
        self.text_fun(msg,"boldblue")
    def world_fun(self,message="No message passed.",color="black"):
        self.color=color
        self.msg=message
        try:
            os.system("tput sgr0")
            sys.stdout.write( text_color[self.color])
            sys.stdout.write("%s" % self.msg)
            reset=os.popen('tput sgr0').read()
            sys.stdout.write(reset)
        except Exception ,e:
            print ("%s" % self.msg)
            log_func(e)
global mysql
count=0

info={
            "user" : "root",
            "pwd": "",
            "host": "localhost",
            "port" : "3306"
            }
class checkMysql(object):
    color=setColor()
    def __init__(self):
        pass

    def check_mysql_socket(self):
        socket=None   
        (ret,res)=execute_command(["cat",".my.cnf"])
        if ret == 0:  
            cnf_socket_path=(re.findall(r"(?<=socket=).+?(?=')",str(res)))  
        else:
            cnf_socket_path=None
        if cnf_socket_path:
            if not os.system("test -S %s" % (cnf_socket_path[0])):
                socket= cnf_socket_path
        elif not os.system("test -S /var/lib/mysql/mysql.sock"):
            socket="/var/lib/mysql/mysql.sock"
        elif not os.system("test -S /var/run/mysqld/mysqld.sock"):
            socket="/var/run/mysqld/mysqld.sock"
        elif not os.system("test -S /tmp/mysql.sock"):
            socket="/tmp/mysql.sock"
        else:
            status, output = commands.getstatusoutput("netstat -ln | awk '/mysql(d)?\.sock/ { print $9 }' | head -1")
            if not status:
                  output=0        
            socket=output
        if debug:
           print "Test for check_mysql_socket functions"
           print ("socket :%s" % socket)

        return socket
    def connect(self,pwd,user,port,host):
        if pwd:
           mysql =  ("mysql -u%s -p%s -h%s -P%s" %  (user,pwd,host,port))

        else: 
           mysql =  ("mysql -u%s -h%s -P%s" %  (user,host,port))

        status, output = commands.getstatusoutput("%s -Bse \"SELECT SUBSTRING_INDEX(VERSION(), '.', +2)\"" % mysql)

        if not  status:
            return True
        
    def inputpwd(self):
        try:
            user=raw_input('User[root]: ')
            inPassword=getpass.getpass('Password[Null]: ')
            port=raw_input('Port[3306]: ')
            host=raw_input('Host[localhost]: ')
            if not user :
                user='root'
            if not port :
                port='3306'
            if not host:
                host='localhost'

          
 
            if self.connect(inPassword,user,port,host):
                     #print inPassword
                     #return inPassword
                     info['user']=user
                     info['pwd']=inPassword
                     info['host']=host
                     info['port']=port
             

            else:
                  self.inputpwd()			
                 
        except KeyboardInterrupt ,e:
            print e
            sys.exit(0)
    def mysql_connect(self):

        socket=self.check_mysql_socket()
     
        user_info={
        "user" : "root",
        "pwd": "",
        "ipa": "localhost",
        "socket" : "socket"
        }

        #user_info['pwd']=''.join(self.inputpwd())
  
        user_info['pwd']=info['pwd']
        user_info['user']=info['user']
        user_info['ipa']=info['host']
 
        user_info['socket']=''.join(self.check_mysql_socket())
        
        global mysql
        if user_info['pwd']:
            mysql =  ("mysql -u%s -p%s -h%s -S%s" % (user_info['user'],user_info['pwd'],user_info['ipa'],user_info['socket']))
        else:
            mysql =  ("mysql -u%s -h%s -S%s" % (user_info['user'],user_info['ipa'],user_info['socket']))

        return mysql
 
    def mysql_variable(self,parameter):
   
        status, output = commands.getstatusoutput("%s -Bse \"show /*!50000 global */ variables like %s\"|awk '{print $2}'  " % (mysql,parameter))
        if debug:
            print "Test for mysql_variable"
            print ("output:%s" % output)
            print ("status:%s" % status)
        if status == 0:
           return output
               
    def mysql_variableTab(self,parameter):

        status, output = commands.getstatusoutput("%s -Bse \"show /*!50000 global */ variables like %s\"|awk -F'\t' '{print $2}'  " % (mysql,parameter))
        if debug:
            print "Test for mysql_variableTAB"
            print ("output:%s" % output)
            print ("status:%s" % status)
        if status == 0:
           return output
   

    def mysql_status(self,parameter):

        status, output = commands.getstatusoutput("%s -Bse \"show /*!50000 global */ status like %s\"|awk -F'\t' '{print $2}'  " % (mysql,parameter))
        if debug:
            print "Test for mysql_status"
            print ("output:%s" % output)
            print ("status:%s" % status)
        if status == 0:
           return output

    '''
    format time for human read
    '''
    def forhumantime(self,time):
        day=int(time)/86400
        hour=int(time)%86400/3600
        minutes=int(time)%86400%3600/60
        second=int(time)%86400%3600%60
        return ("%s day %sh:%sm:%ss" % (day,hour,minutes,second))
        if debug:
            print ("%s day %sh:%sm:%ss" % (day,hour,minutes,second))
    def forhumansize(self,size):
        size=float(size)
        if size > 1073741824:
             util='G'
             level=3
        elif size > 1048576:
             util='M'
             level=2
        elif size > 1024:
              util='K'
              level=1
        else :
              util='B'
              level=0
        dividend=1
        for i in range(0 ,level):         
             dividend *= 1024
        rsize =size/dividend
        return ("%4.2f %s" % (rsize,util))

    def mysql_info(self):
        '''
        mysql share info
        '''
        mysql=self.mysql_connect()

        status, output = commands.getstatusoutput("%s -Bse \"SELECT SUBSTRING_INDEX(VERSION(), '.', +2)\"" % mysql)
        mysqlmajor_version=output
        status, output = commands.getstatusoutput("%s -Bse \"SELECT LEFT(REPLACE(SUBSTRING_INDEX(VERSION(), '-', +1), '.', ''),4)\"" % mysql)
        mysql_version_num=output
        '''
        mysql base info
        '''
        self.color.text_fun("-MySQL INFO:","boldblue")
        version=self.mysql_variable("\'version\'")
        self.color.world_fun("MySQL Version: %s \n" % version )

        uptime=self.mysql_status("\'Uptime\'")
        rduptime=self.forhumantime(uptime)
        self.color.world_fun("Uptime =  %s \n" % rduptime )
        questions=self.mysql_status ("\'Questions\'")
        question_per_sec=int(questions)/int(uptime)     
        self.color.world_fun("Avg. qps = %s \n" % question_per_sec)     
        self.color.world_fun("Total Questions = %s \n" % questions)
        threads=self.mysql_status("\'Threads_connected\'")  
        self.color.world_fun("Threads Connected = %s \n" % threads)
        if uptime < 172800:
            self.color.text_fun("Server has been running for over 48hrs.")
        else:
            self.color.text_fun("Warning: Server not been running for at least 48hrs.","boldred")


        '''
        mysql SLOW QUERIES
        '''
        self.color.text_fun("-MySQL SLOW QUERIES:","boldblue")
        slow_queries=self.mysql_status("\'Slow_queries\'")
        long_query_time=self.mysql_variable("\'long_query_time\'")
        log_slow_queries=self.mysql_variable("\'log%queries\'")
        if os.path.isfile("/etc/my.cnf"):
            if not log_slow_queries:
                status, output = commands.getstatusoutput("grep log_slow_queries /etc/my.cnf ")                  
                log_slow_queries=output
        if log_slow_queries == 'ON' : 
            self.color.text_fun("The slow query log is enabled.")
        elif log_slow_queries == 'OFF':
            self.color.world_fun("The slow query log is")
            self.color.world_fun(" NOT ","boldred")
            self.color.world_fun("enabled.\n")
        elif not log_slow_queries:
            self.color.world_fun("The slow query log is")
            self.color.world_fun(" NOT ","boldred")
            self.color.world_fun("enabled.\n")
        else:
            self.color.text_fun(("Error:%s"% log_slow_queries),"boldred")
        self.color.world_fun('Current long_query_time =%s sec\n'% long_query_time)
        self.color.world_fun("You have ")
        self.color.world_fun(slow_queries,"boldred")
        self.color.world_fun(" out of ")
        self.color.world_fun(questions,"boldred")
        self.color.world_fun(" that take longer than %s sec. to complete\n" % long_query_time)
        prefered_query_time=5
        if float(long_query_time) < float(prefered_query_time):
            self.color.text_fun(("Your long_query_time may be too high, I typically set this under %s sec" % prefered_query_time),"red") 
        else:
            self.color.world_fun("Your long_query_time seems to be fine\n","green")
        if debug:     
            print "Test for mysql slow queries"
            print ("log_slow_queries %s:" % log_slow_queries)
            self.color.world_fun(("Error:%s\n"% log_slow_queries),"boldred")

        '''
        BINARY UPDATE LOG
        '''
        self.color.text_fun("-MySQL BINARY UPDATE LOG:","boldblue")
        log_bin=self.mysql_variable("\'log_bin\'")
        max_binlog_size=self.mysql_variable("\'max_binlog_size\'")
        expire_logs_days=self.mysql_variable("\'expire_logs_days\'")
        sync_binlog=self.mysql_variable("\'sync_binlog\'")
        max_binlog_cache_size=self.mysql_variable("\'max_binlog_cache_size\'")
        if debug:
            print ("log_bin:%s" % log_bin)
            print ("max_binlog_size:%s" % max_binlog_size)
            print ("expire_logs_days:%s" % expire_logs_days)
            print ("sync_binlog:%s" % sync_binlog)
            print ("max_binlog_cache_size:%s" % max_binlog_cache_size)
        if log_bin == 'ON':
            self.color.world_fun("The binary update log is enabled\n")
            if expire_logs_days is None:
                self.color.text_fun("The max_binlog_size is not set. The binary log will rotate when it reaches 1GB","red")
            if expire_logs_days == '0':
                self.color.world_fun("The expire_logs_days is NOT set.\n","boldred")
                self.color.world_fun("The mysqld will retain the entire binary log until \n","red")
                self.color.world_fun("RESET MASTER or PURGE MASTER LOGS commands are run manually \n","red")
                self.color.world_fun("Setting expire_logs_days will allow you to remove old binary logs automatically \n","yellow")
            if  sync_binlog == '0' :
                self.color.world_fun("Binlog sync is not enabled, you could loose binlog records during a server crash \n","red")         
        else:
            self.color.world_fun("The binary update log is ")
            self.color.world_fun("NOT ","boldred")
            self.color.world_fun("enabled.\n")
            self.color.world_fun("You will not be able to do point in time recovery.\n","red")

        '''
        MAX CONNECTIONS
        '''
        self.color.text_fun("-MySQL MAX CONNECTIONS:","boldblue")
        max_connections=self.mysql_variable("\'max_connections\'")
        max_used_connections=self.mysql_status("\'Max_used_connections\'")
        threads_connected=self.mysql_status("\'Threads_connected\'")
        connections_ratio=float(max_used_connections)*100/float(max_connections)
        if debug:
            print ("max_connections : %s" % max_connections)
            print ("max_used_connections : %s" % max_used_connections)
            print ("threads_connected : %s" % threads_connected)
            print ("connections_ratio : %s" % connections_ratio)
        
        self.color.world_fun("Current max_connections = %s \n" % max_connections)
        self.color.world_fun("Current threads_connected = %s \n" % threads_connected)
        self.color.world_fun("Currentmax_used_connections = %s \n" % max_used_connections)
        self.color.world_fun("The number of used connections is ")
        text_color=None
        error='0'
        if int(connections_ratio) > 84:
            text_color="red"
            error='1'
        elif int(connections_ratio) < 16:
            text_color="red"
            error='2'
        else:
            text_color="green"
            error='0'
        #print text_color 
        self.color.world_fun(("%4.2f%%" % connections_ratio),text_color)
        self.color.world_fun(" of the configured maximum.\n")
        if error=='1':
            self.color.world_fun("You should raise max_connections.\n",text_color)
        elif error=='2':
            self.color.world_fun("You are using less than 10% of your configured max_connections.\n",text_color)
            self.color.world_fun("Lowering max_connections could help to avoid an over-allocation of memory\n",text_color)
            self.color.world_fun("See \"MEMORY USAGE\" section to make sure you are not over-allocating\n",text_color)
        else:
            self.color.world_fun("Your max_connections variable seems to be fine.\n",text_color)
        text_color=None 

        '''
        WORKER THREADS
        '''
        self.color.text_fun("-MySQL WORKER THREADS:","boldblue")
        threads_created1=self.mysql_status("\'Threads_connected\'")
        time.sleep(1)
        threads_created2=self.mysql_status("\'Threads_connected\'")
        threads_cached=self.mysql_status("\'Threads_cached\'")
        uptime=self.mysql_status("\'Uptime\'")
        thread_cache_size=self.mysql_variable("\'thread_cache_size\'")
        historic_threads_per_sec=float(threads_created1)/float(uptime)
        current_threads_per_sec=int(threads_created2)-int(threads_created1)
        self.color.world_fun("Current thread_cache_size = %s \n" % thread_cache_size)
        self.color.world_fun("Current threads_cached = %s \n" % threads_cached)
        self.color.world_fun("Current threads_per_sec = %s \n" % current_threads_per_sec)
        self.color.world_fun("Historic threads_per_sec = %4.2f \n" % historic_threads_per_sec)
        if int(historic_threads_per_sec) > 2 and int(threads_cached) < 1 :
            self.color.world_fun("Threads created per/sec are overrunning threads cached\n","red")
        elif  int(historic_threads_per_sec) > 2:
            self.color.world_fun("Threads created per/sec are overrunning threads cached\n","red")
            self.color.world_fun("You should raise thread_cache_sized\n","red")
        else:
            self.color.world_fun("Your thread_cache_size is fine\n","green")
        if debug:
            print ("threads_created1 : %s" % threads_created1)
            print ("threads_created2 : %s" % threads_created2)
            print ("threads_cached : %s" % threads_cached)
            print ("uptime : %s" % uptime)
            print ("thread_cache_size : %s" % thread_cache_size)
            print ("historic_threads_per_sec : %s" % historic_threads_per_sec)
            print ("current_threads_per_sec : %s" % current_threads_per_sec)

        '''
        KEY BUFFER
        '''
        self.color.text_fun("-MySQL KEY BUFFER:","boldblue")
        key_read_requests=self.mysql_status("\'Key_read_requests\'")
        key_reads=self.mysql_status("\'Key_reads\'")
        key_blocks_used=self.mysql_status("\'Key_blocks_used\'")
        key_blocks_unused=self.mysql_status("\'Key_blocks_unused\'")
        key_cache_block_size=self.mysql_variable("\'key_cache_block_size\'")
        key_buffer_size=self.mysql_variable("\'key_buffer_size\'")
        datadir=self.mysql_variable("\'datadir\'")
        mysql_version_compile_machine=self.mysql_variable("\'version_compile_machine\'")
        #mysql="mysql"
        status, output = commands.getstatusoutput("%s -Bse  \"/*!50000 SELECT IFNULL(SUM(INDEX_LENGTH),0) from information_schema.TABLES where ENGINE=\'MyISAM\' */ \" " % (mysql))
        myisam_indexes=output
        if not myisam_indexes :
            status, output = commands.getstatusoutput("find %s -name '*.MYI' -exec du -b '{}' \; 2>&1 | awk '{ s += $1 } END { printf(\"%%.0f\\n\", s )}' " % (datadir))
            myisam_indexes=output
        if key_reads == '0':
            self.color.world_fun("No key reads?!\n","boldred")
            self.color.world_fun("Seriously look into using some indexes\n","red")
            key_cache_miss_rate=0
            key_buffer_free=float(key_blocks_unused)*float(key_cache_block_size)/float(key_buffer_size)*100
            key_buffer_freeINT=int(key_buffer_free)
        else :
            key_cache_miss_rate=float(key_read_requests)/float(key_reads)
            if not key_blocks_unused:
                key_buffer_free=float(key_blocks_unused)*float(key_cache_block_size)/float(key_buffer_size)*100
                key_buffer_freeINT=int(key_buffer_free)
            else:
                key_buffer_free='Unknown'
                key_buffer_freeINT=75
         
        myisam_indexesHR=self.forhumansize(myisam_indexes);
        key_buffer_sizeHR=self.forhumansize(key_buffer_size);
        self.color.world_fun("Current MyISAM index space = %s \n" % myisam_indexesHR)
        self.color.world_fun("Current key_buffer_size = %s \n" % key_buffer_sizeHR)
        self.color.world_fun("Key cache miss rate is  : %s \n" % key_cache_miss_rate)
        self.color.world_fun("Key buffer free ratio = %s \n" % key_buffer_freeINT)
        if mysqlmajor_version == '5.1' and int(mysql_version_num) < 5123:
            self.color.world_fun("Using key_buffer_size > 4GB will cause instability in versions prior to 5.1.23\n","boldred")
        if int(key_cache_miss_rate) <= 100 and int(key_cache_miss_rate) <= 0 and int(key_buffer_freeINT) <= 0 :
            self.color.world_fun("You could increase key_buffer_size\n","boldred")
            self.color.world_fun("It is safe to raise this up to 1/4 of total system memory;\n","red")
            self.color.world_fun("assuming this is a dedicated database server.\n","red")
        elif  int(key_buffer_freeINT) <= 20 and int(key_buffer_size) <= int(myisam_indexes):
            self.color.world_fun("You could increase key_buffer_size\n","boldred")
            self.color.world_fun("It is safe to raise this up to 1/4 of total system memory;\n","red")
            self.color.world_fun("assuming this is a dedicated database server.\n","red")
        elif  int(key_buffer_freeINT) <= 50 and int(key_cache_miss_rate) >= 10000 :
            self.color.world_fun("Your key_buffer_size seems to be too high;\n","boldred")
            self.color.world_fun("Perhaps you can use these resources elsewhere\n","red")
        else :
            self.color.world_fun("Your key_buffer_size seems to be fine.\n","green")
        if debug:
            print ("key_read_requests : %s" % key_read_requests)
            print ("key_reads : %s" % key_reads)
            print ("key_blocks_used : %s" % key_blocks_used)
            print ("key_blocks_unused : %s" % key_blocks_unused)
            print ("key_cache_block_size : %s" % key_cache_block_size)
            print ("key_buffer_size : %s" % key_buffer_size)
            print ("datadir : %s" % datadir)
            print ("mysql_version_compile_machine : %s" % mysql_version_compile_machine)
            print ("myisam_indexes : %s" % myisam_indexes)
            print ("key_cache_miss_rate : %s" % key_cache_miss_rate)
            print ("key_buffer_freeINT : %s" % key_buffer_freeINT)
            print ("myisam_indexesHR : %s" % myisam_indexesHR)
            print ("key_buffer_sizeHR : %s" % key_buffer_sizeHR) 
 
        '''
        QUERY CACHE
        '''
        self.color.text_fun("-MySQL QUERY CACHE:","boldblue")
        mysql_version=self.mysql_variable("\'version\'")
        query_cache_size=self.mysql_variable("\'query_cache_size\'")
        query_cache_limit=self.mysql_variable("\'query_cache_limit\'")
        query_cache_min_res_unit=self.mysql_variable("\'query_cache_min_res_unit\'")
        qcache_free_memory=self.mysql_status("\'Qcache_free_memory\'")
        qcache_total_blocks=self.mysql_status("\'Qcache_total_blocks\'")
        qcache_free_blocks=self.mysql_status("\'Qcache_free_blocks\'")
        qcache_lowmem_prunes=self.mysql_status("\'Qcache_lowmem_prunes\'")
        if not query_cache_size:
            self.color.world_fun("You are using MySQL $mysql_version, no query cache is supported\n","red")
        elif   query_cache_size == '0':
            self.color.world_fun("Query cache is supported but not enabled\n","red")
        else:
            qcache_used_memory=int(query_cache_size)-int(qcache_free_memory)
            qcache_mem_fill_ratio=float(qcache_used_memory)* 100 / float(query_cache_size)
            qcache_mem_fill_ratioINT=int(qcache_mem_fill_ratio)
            self.color.world_fun("Query cache is enabled\n","green")
            query_cache_sizeHR=self.forhumansize(query_cache_size)
            self.color.world_fun("Current query_cache_size = %s \n"% query_cache_sizeHR)
            qcache_used_memoryHR=self.forhumansize(qcache_used_memory)
            self.color.world_fun("Current query_cache_used = %s \n"% qcache_used_memoryHR)
            query_cache_limitHR=self.forhumansize(query_cache_limit)
            self.color.world_fun("Current query_cache_limit = %s \n"% query_cache_limitHR)
            self.color.world_fun("Query cache Memory fill ratio  = %4.2f%% \n" % qcache_mem_fill_ratio)
            if not query_cache_min_res_unit:
                self.color.world_fun("No query_cache_min_res_unit is defined.  Using MySQL < 4.1 cache fragmentation can be inpredictable\n","yellow")
            else:
                query_cache_min_res_unitHR=self.forhumansize(query_cache_min_res_unit) 
                self.color.world_fun("Current query_cache_min_res_unit = %s \n" % query_cache_min_res_unitHR)
            if int(qcache_free_blocks) > 2 and int(qcache_total_blocks) < 0 :
                qcache_percent_fragmented=float(qcache_free_blocks)*100/float(qcache_total_blocks)
                qcache_percent_fragmentedINT=int(qcache_percent_fragmented)
                if  int(qcache_percent_fragmentedINT) > 20 :
                    self.color.world_fun(("Query Cache is %s%% fragmented \n"  % qcache_percent_fragmentedINT),"red")
                    self.color.world_fun("Run \"FLUSH QUERY CACHE\" periodically to defragment the query cache memor \n","red")
                    self.color.world_fun("If you have many small queries lower 'query_cache_min_res_unit' to reduce fragmentation. \n" ,"red")
            if int(qcache_mem_fill_ratioINT) < 25 :
                self.color.world_fun("Your query_cache_size seems to be too high\n","red")
                self.color.world_fun("Perhaps you can use these resources elsewhere\n","red")
            if int(qcache_lowmem_prunes) >= 50 and qcache_mem_fill_ratioINT >= 80:
                self.color.world_fun("However,")        
                self.color.world_fun(("%s " % qcache_lowmem_prunes  ),"boldred")
                self.color.world_fun("queries have been removed from the query cache due to lack of memory \n")   
                self.color.world_fun("Perhaps you should raise query_cache_size.\n","boldred")
            self.color.world_fun("MySQL won't cache query results that are larger than query_cache_limit in size.\n","yellow")

        if debug:
            print ("mysql_version : %s" % mysql_version)
            print ("query_cache_size : %s" % query_cache_size)
            print ("query_cache_limit : %s" % query_cache_limit)
            print ("query_cache_min_res_unit : %s" % query_cache_min_res_unit)
            print ("qcache_free_memory : %s" % qcache_free_memory)
            print ("qqcache_total_blocks : %s" % qcache_total_blocks)
            print ("qcache_free_blocks : %s" % qcache_free_blocks)
            print ("qcache_lowmem_prunes : %s" % qcache_lowmem_prunes)
            print ("qcache_used_memory : %s" %  qcache_used_memory)
            print ("qcache_mem_fill_ratio : %s" %  qcache_mem_fill_ratio)

        '''
        SORT OPERATIONS

        '''
        self.color.text_fun("-MySQL SORT OPERATIONS:","boldblue")
        sort_merge_passes=self.mysql_status("\'Sort_merge_passes\'")
        sort_scan=self.mysql_status("\'Sort_scan\'")
        sort_range=self.mysql_status("\'Sort_range\'")
        sort_buffer_size=self.mysql_variable("\'sort_buffer%\'")
        read_rnd_buffer_size=self.mysql_variable("\'read_rnd_buffer_size\'")
        total_sorts=int(sort_scan)+int(sort_range)
        if not read_rnd_buffer_size:
            read_rnd_buffer_size=self.mysql_variable("\'record_buffer\'")
        sort_buffer_size=int(sort_buffer_size)+8
        read_rnd_buffer_size=int(read_rnd_buffer_size)+8 
        sort_buffer_sizeHR=self.forhumansize(sort_buffer_size)
        self.color.world_fun("Current sort_buffer_size = %s \n"  % sort_buffer_sizeHR)
        read_rnd_buffer_sizeHR=self.forhumansize(read_rnd_buffer_size)   
        self.color.world_fun("read_rnd_buffer_size = %s \n"  % read_rnd_buffer_sizeHR)
        if int(total_sorts) == 0 : 
            self.color.world_fun("No sort operations have been performed\n")
            passes_per_sort=0
        if int(sort_merge_passes) != 0:
            passes_per_sort=float(sort_merge_passes)/float(total_sorts)
        else:
            passes_per_sort=0
        if  passes_per_sort >= 2:
            self.color.world_fun("On average")
            self.color.world_fun(passes_per_sort,"boldred")
            self.color.world_fun("sort merge passes are made per sort operation\n")
            self.color.world_fun("You should raise your sort_buffer_size read_rnd_buffer_size \n")
        else:
            self.color.world_fun("Sort buffer seems to be fine\n","green")
        if debug:
            print ("sort_merge_passes : %s" % sort_merge_passes)
            print ("sort_scan : %s" % sort_scan)
            print ("sort_range : %s" % sort_range)
            print ("sort_buffer_size : %s" % sort_buffer_size)
            print ("read_rnd_buffer_size : %s" % read_rnd_buffer_size)
            print ("total_sorts : %s" % total_sorts)
            print ("passes_per_sort : %s" % passes_per_sort)
        '''
        JOINS
        '''
        self.color.text_fun("-MySQL JOINS:","boldblue")
        select_full_join=self.mysql_status("\'Select_full_join\'")
        select_range_check=self.mysql_status("\'Select_range_check\'")
        join_buffer_size=self.mysql_variable("\'join_buffer%\'")
        join_buffer_size=int(join_buffer_size)+4096
        join_buffer_sizeHR=self.forhumansize(join_buffer_size)
        self.color.world_fun("Current join_buffer_size = %s \n"  % join_buffer_sizeHR)
        self.color.world_fun(("You have had %s queries where a join could not use an index properly \n" % select_full_join))
        if int(select_range_check) == 0 and int(select_full_join) == 0:
            self.color.world_fun("Your joins seem to be using indexes properly \n","green")
        print_error=None
        raise_buffer=None
        if int(select_full_join) > 0 :
            print_error= 'true'
            raise_buffer= 'true'
        if int(select_range_check) > 0:
            self.color.world_fun(("You have had %s joins without keys that check for key usage after each row\n" % select_range_check),"green")
            print_error= 'true'
            raise_buffer= 'true'
        if int(join_buffer_size) > 4194304 :
            self.color.world_fun("join_buffer_size >= 4 M\nThis is not advised \n","boldred")
        if print_error :
            self.color.world_fun("hen look for non indexed joins in the slow query log \n","red")
            if print_error :
                self.color.world_fun("If you are unable to optimize your queries you may want to increase your join_buffer_size to accommodate larger joins in one pass\n","red")              

        if debug:
            print ("select_full_join : %s" % select_full_join)
            print ("select_range_check : %s" % select_range_check)
            print ("join_buffer_size : %s" % join_buffer_size)
            print ("join_buffer_sizeHR : %s" % join_buffer_sizeHR)


        '''
        TEMP TABLES
        '''
        self.color.text_fun("-MySQL TEMP TABLES:","boldblue")
        created_tmp_tables=self.mysql_status("\'Created_tmp_tables\'")
        created_tmp_disk_tables=self.mysql_status("\'Created_tmp_disk_tables\'")
        tmp_table_size=self.mysql_variable("\'tmp_table_size\'")
        max_heap_table_size=self.mysql_variable("\'max_heap_table_size\'")
        if int(created_tmp_tables) == 0:
            tmp_disk_tables=0
        else:
            tmp_disk_tables=float(created_tmp_disk_tables)*100/(int(created_tmp_tables)+int(created_tmp_disk_tables))
        max_heap_table_sizeHR=self.forhumansize(max_heap_table_size)
        self.color.world_fun("Current max_heap_table_size = %s \n"  % max_heap_table_sizeHR)
        tmp_table_sizeHR=self.forhumansize(tmp_table_size)
        self.color.world_fun("Current tmp_table_size = %s \n"  % tmp_table_sizeHR)
        self.color.world_fun("Of %s temp tables, %4.2f%% were created on disk\n"  % (created_tmp_tables,tmp_disk_tables))
        if int(tmp_disk_tables) > int(max_heap_table_size):
            self.color.world_fun("Effective in-memory tmp_table_size is limited to max_heap_table_size.\n","yellow")
        if int(tmp_disk_tables) >= 25:
            self.color.world_fun("Perhaps you should increase your tmp_table_size and/or max_heap_table_size.\n","boldred")
            self.color.world_fun("to reduce the number of disk-based temporary tables\n","boldred")
            self.color.world_fun("Note! BLOB and TEXT columns are not allow in memory tables.\n","yellow")
            self.color.world_fun("If you are using these columns raising these values might not impact your\nratio of on disk temp tables.\n","yellow")
        else :
            self.color.world_fun("Created disk tmp tables ratio seems fine\n","green")

        if debug:
            print ("created_tmp_tables : %s" % created_tmp_tables)
            print ("created_tmp_disk_tables : %s" % created_tmp_disk_tables)
            print ("tmp_table_size : %s" % tmp_table_size)
            print ("max_heap_table_size : %s" % max_heap_table_size)
            print ("tmp_disk_tables : %s" % tmp_disk_tables)

        
        '''
        OPEN FILES LIMIT
        '''
        self.color.text_fun("-MySQL OPEN FILES LIMIT:","boldblue")
        open_files_limit=self.mysql_variable("\'open_files_limit\'")
        open_files=self.mysql_status("\'Open_files\'")
        if not open_files_limit or open_files_limit == 0:
            open_files_limit=os.popen("ulimit -n").read()
            cant_override=1
            #print open_files_limit
        else:
            cant_override=0
        self.color.world_fun("Current open_files_limit = %s \n"  % open_files_limit)
        open_files_ratio=float(open_files)*100/float(open_files_limit)
        self.color.world_fun("The open_files_limit should typically be set to at least 2x-3x\n","yellow") 
        self.color.world_fun("that of table_cache if you have heavy MyISAM usage.\n","yellow")  
        if int(open_files_ratio) >= 75:
            self.color.world_fun("You currently have open more than 75% of your open_files_limit\n","boldred")
            if cant_override == '1':
                self.color.world_fun("You should set a higer value for ulimit -u in the mysql startup script then restart mysqld\n","boldred")   
            elif cant_override == '0':
                self.color.world_fun("You should set a higher value for open_files_limit in my.cnf\n","boldred")  
            else:
                self.color.world_fun("ERROR can't determine if mysqld override of ulimit is allowed\n","boldred")
        else:
            self.color.world_fun("Your open_files_limit value seems to be fine\n","green")                 
        if debug:
            print ("open_files_limit : %s" % open_files_limit)
            print ("open_files : %s" % open_files)
            print ("open_files_ratio : %s" % open_files_ratio)
        '''
        TABLE CACHE
        '''
        self.color.text_fun("-MySQL TABLE CACHE:","boldblue")
        datadir=self.mysql_variable("\'datadir\'")
        table_cache=self.mysql_variable("\'table_cache\'")
        table_open_cache=self.mysql_variable("\'table_open_cache\'")
        table_definition_cache=self.mysql_variable("\'table_definition_cache\'")
        open_tables=self.mysql_status("\'Open_tables\'")
        opened_tables=self.mysql_status("\'Opened_tables\'")
        open_table_definitions=self.mysql_status("\'Open_table_definitions\'")
        #mysql="mysql"
        status, output = commands.getstatusoutput("%s -Bse \"/*!50000 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' */\"" % (mysql))
        table_count=output
        if not table_count:
            table_count=os.popen("find $datadir 2>&1 | grep -c .frm$").read()
        if table_open_cache :
            table_cache=table_open_cache
        table_cache_hit_rate="unkowning"
        table_cache_fill="unkowning"
        if opened_tables != '0' and table_cache != 0 :
            table_cache_hit_rate = float(open_tables)*100/float(opened_tables)
            table_cache_fill=float(open_tables)*100/float(table_cache)
        elif opened_tables == '0' and table_cache != 0 :
            table_cache_hit_rate = 100
            table_cache_fill=float(open_tables)*100/float(table_cache)
        else:
            self.color.world_fun("ERROR no table_cache ?!\n","boldred")
        if table_cache and  not table_open_cache :
            self.color.world_fun("Current table_open_cache = %s tables \n" % table_cache)
        if table_cache :
            self.color.world_fun("Current table_open_cache = %s tables \n" % table_open_cache) 
            self.color.world_fun("Current table_definition_cache = %s tables \n" % table_definition_cache) 
        if table_count :
            self.color.world_fun("You have a total of %s tables \n" % table_count) 
        if int(table_cache_fill) < 95:
            self.color.world_fun("You have ")
            self.color.world_fun(open_tables,"green")    
            self.color.world_fun(" open tables \n")
            self.color.world_fun("The table_cache value seems to be fine \n","green")
        elif int(table_cache_hit_rate) <= 85 or int(table_cache_fill) >= 95 :     
            self.color.world_fun("You have ")
            self.color.world_fun(open_tables,"boldred")    
            self.color.world_fun(" open tables \n")
            self.color.world_fun("Current table_cache hit rate is ") 
            self.color.world_fun(("%4.2f" % table_cache_hit_rate),"boldred") 
            self.color.world_fun(", while ")
            self.color.world_fun(("%4.2f" % table_cache_fill),"boldred")        
            self.color.world_fun(" of your table cache is in use\n")
            self.color.world_fun("You should probably increase your table_cache \n","red")  
        else :     
            self.color.world_fun("Current table_cache hit rate is ") 
            self.color.world_fun(("%4.2f" % table_cache_hit_rate),"green") 
            self.color.world_fun(", while ")
            self.color.world_fun(("%4.2f" % table_cache_fill),"green")        
            self.color.world_fun(" of your table cache is in use\n")
            self.color.world_fun("The table cache value seems to be fine \n","green")                
        if int(table_definition_cache) and int(table_definition_cache) <= int(table_count) and int(table_count) < 100 :
            self.color.world_fun("You should probably increase your table_definition_cache value. \n","red")   
        
        if debug:
            print ("datadir : %s" % datadir)
            print ("table_cache : %s" % table_cache)
            print ("table_open_cache : %s" % table_open_cache)
            print ("table_definition_cache : %s" % table_definition_cache)
            print ("open_tables : %s" % open_tables)
            print ("opened_tables : %s" % opened_tables)
            print ("open_table_definitions : %s" % open_table_definitions)
            print ("table_count : %s" % table_count)
            print ("table_cache_hit_rate : %s" % table_cache_hit_rate)
            print ("table_cache_fill : %s" %  table_cache_fill)
        '''
        TABLE LOCKING
        '''
        self.color.text_fun("-MySQL TABLE LOCKING:","boldblue")
        table_locks_waited=self.mysql_status("\'Table_locks_waited\'")
        table_locks_immediate=self.mysql_status("\'Table_locks_immediate\'")
        concurrent_insert=self.mysql_variable("\'concurrent_insert\'")
        low_priority_updates=self.mysql_variable("\'low_priority_updates\'")
        self.color.world_fun("Current Lock Wait ratio = ")
        if int(table_locks_waited) > 0 :
            immediate_locks_miss_rate = float(table_locks_immediate)/float(table_locks_waited)
            self.color.world_fun(("1 : %4.2f \n" %  immediate_locks_miss_rate),"red")
        else :
            immediate_locks_miss_rate = 9999    
            self.color.world_fun(("0 : %s \n" %  questions),"red")
        if int(immediate_locks_miss_rate) < 5000 :
            self.color.world_fun("You may benefit from selective use of InnoDB \n")
            if low_priority_updates == 'OFF':
                self.color.world_fun("If you have long running SELECT's against MyISAM tables and perform \nfrequent updates consider setting 'low_priority_updates=1' \n")
            if int(concurrent_insert) <= 1  and  mysqlmajor_version == '5.0' or mysqlmajor_version  == '5.1' : 
                self.color.world_fun("If you have a high concurrency of inserts on Dynamic row-length tables \nonsider setting 'concurrent_insert=2' \n")
        else:
            self.color.world_fun("The table locking seems to be fine \n","green")
      
                     
        if debug:
            print ("table_locks_waited : %s" % table_locks_waited)
            print ("table_locks_immediate : %s" % table_locks_immediate)
            print ("concurrent_insert : %s" % concurrent_insert)
            print ("low_priority_updates : %s" % low_priority_updates)
        '''
        TABLE SCANS
        '''
        self.color.text_fun("-MySQL TABLE SCANS:","boldblue")
        com_select=self.mysql_status("\'Com_select\'")
        read_rnd_next=self.mysql_status("\'Handler_read_rnd_next\'")
        read_buffer_size=self.mysql_variable("\'read_buffer_size\'")
        if not read_buffer_size :
            read_buffer_size=self.mysql_variable("\'record_buffer\'")
        read_buffer_sizeHR=self.forhumansize(read_buffer_size)
        self.color.world_fun("Current read_buffer_size = %s \n"% read_buffer_sizeHR) 
        if int(com_select) > 0 :     
            full_table_scans= float(read_rnd_next)/float(com_select)
            self.color.world_fun("Current table scan ratio = %4.2f : 1 \n"% full_table_scans)
            if int(full_table_scans) >= 4000 and int(read_buffer_size) <= 2097152 :
                self.color.world_fun("You have a high ratio of sequential access requests to SELECTs \n","red") 
                self.color.world_fun("You may benefit from raising 'read_buffer_size' and/or improving your use of indexes \n","red") 
            elif  int(read_buffer_size) > 8388608 :
                self.color.world_fun("read_buffer_size is over 8 MB \n","red") 
                self.color.world_fun("there is probably no need for such a large read_buffe\n","red") 
            else:
                self.color.world_fun("read_buffer_size seems to be fine\n","green")
        else:
            self.color.world_fun("read_buffer_size seems to be fine\n","green")
           
        if debug:
            print ("com_select : %s" % com_select)
            print ("read_rnd_next : %s" % read_rnd_next)
            print ("read_buffer_size : %s" % read_buffer_size)

        '''
        INNODB STATUS
        '''
        self.color.text_fun("-MySQL INNODB STATUS:","boldblue")
        have_innodb=self.mysql_variable("\'have_innodb\'")
        if have_innodb == 'YES':
            innodb_buffer_pool_size=self.mysql_variable("\'innodb_buffer_pool_size\'")
            innodb_additional_mem_pool_size=self.mysql_variable("\'innodb_additional_mem_pool_size\'")
            innodb_fast_shutdown=self.mysql_variable("\'innodb_fast_shutdown\'")
            innodb_flush_log_at_trx_commit=self.mysql_variable("\'innodb_flush_log_at_trx_commit\'")
            innodb_locks_unsafe_for_binlog=self.mysql_variable("\'innodb_locks_unsafe_for_binlog\'")
            innodb_log_buffer_size=self.mysql_variable("\'innodb_log_buffer_size\'")
            innodb_log_file_size=self.mysql_variable("\'innodb_log_file_size\'")
            innodb_log_files_in_group=self.mysql_variable("\'innodb_log_files_in_group\'")
            innodb_safe_binlog=self.mysql_variable("\'innodb_safe_binlog\'")
            innodb_thread_concurrency=self.mysql_variable("\'innodb_thread_concurrency\'")
         
            status, output1 = commands.getstatusoutput("%s -Bse \"/*!50000 SELECT IFNULL(SUM(INDEX_LENGTH),0) from information_schema.TABLES where ENGINE='InnoDB' */\"" % (mysql))
		    
            innodb_indexes=output1
            status, output2 = commands.getstatusoutput("%s -Bse \"/*!50000 SELECT IFNULL(SUM(DATA_LENGTH),0) from information_schema.TABLES where ENGINE='InnoDB' */\"" % (mysql))
            innodb_data=output2
            if innodb_indexes :
                innodb_buffer_pool_pages_data=self.mysql_status("\'Innodb_buffer_pool_pages_data\'")
                innodb_buffer_pool_pages_misc=self.mysql_status("\'Innodb_buffer_pool_pages_misc\'")
                innodb_buffer_pool_pages_free=self.mysql_status("\'Innodb_buffer_pool_pages_free\'")
                innodb_buffer_pool_pages_total=self.mysql_status("\'Innodb_buffer_pool_pages_total\'")
                innodb_buffer_pool_read_ahead_seq=self.mysql_status("\'Innodb_buffer_pool_read_ahead_seq\'")
                innodb_buffer_pool_read_requests=self.mysql_status("\'Innodb_buffer_pool_read_requests\'")
                innodb_os_log_pending_fsyncs=self.mysql_status("\'Innodb_os_log_pending_fsyncs\'")
                innodb_os_log_pending_writes=self.mysql_status("\'Innodb_os_log_pending_writes\'")
                innodb_log_waits=self.mysql_status("\'Innodb_log_waits\'")
                innodb_row_lock_time=self.mysql_status("\'Innodb_row_lock_time\'")
                innodb_row_lock_time=self.mysql_status("\'Innodb_row_lock_waits\'")
                innodb_indexesHR=self.forhumansize(innodb_indexes)
                self.color.world_fun("Current InnoDB index space = %s \n"% innodb_indexesHR) 
                innodb_dataHR=self.forhumansize(innodb_data)
                self.color.world_fun("Current InnoDB data space = %s \n"% innodb_dataHR) 
                percent_innodb_buffer_pool_free=float(innodb_buffer_pool_pages_free)*100/float(innodb_buffer_pool_pages_total)
                self.color.world_fun("Current InnoDB buffer pool free = %4.2f%%\n"% percent_innodb_buffer_pool_free) 
            else:
                self.color.world_fun("Cannot parse InnoDB stats prior to 5.0.x\n","red")
            innodb_buffer_pool_sizeHR=self.forhumansize(innodb_buffer_pool_size)
            self.color.world_fun("Current innodb_buffer_pool_size = %s \n"% innodb_buffer_pool_sizeHR) 
            self.color.world_fun("Depending on how much space your innodb indexes take up it may be safe\n") 
            self.color.world_fun("to increase this value to up to 2 / 3 of total system memory\n") 
        else:
            self.color.world_fun("No InnoDB Support Enabled!\n","boldred")

        if debug:
            print ("have_innodb : %s" % have_innodb )
            print ("innodb_buffer_pool_size : %s" % innodb_buffer_pool_size )
            print ("innodb_additional_mem_pool_size : %s" % innodb_additional_mem_pool_size )
            print ("innodb_fast_shutdown : %s" % innodb_fast_shutdown )
            print ("innodb_flush_log_at_trx_commit : %s" % innodb_flush_log_at_trx_commit)
            print ("innodb_locks_unsafe_for_binlog : %s" % innodb_locks_unsafe_for_binlog)
            print ("innodb_log_buffer_size : %s" % innodb_log_buffer_size )
            print ("innodb_log_file_size : %s" % innodb_log_file_size )
            print ("innodb_log_files_in_group : %s" % innodb_log_files_in_group)
            print ("innodb_thread_concurrency : %s" % innodb_thread_concurrency)
            print ("innodb_buffer_pool_pages_data : %s" % innodb_buffer_pool_pages_data )
            print ("innodb_buffer_pool_pages_misc : %s" % innodb_buffer_pool_pages_misc )
            print ("innodb_buffer_pool_pages_free : %s" % innodb_buffer_pool_pages_free)
            print ("innodb_buffer_pool_pages_total : %s" % innodb_buffer_pool_pages_total)
            print ("innodb_buffer_pool_read_ahead_seq : %s" % innodb_buffer_pool_read_ahead_seq )
            print ("innodb_buffer_pool_read_requests : %s" % innodb_buffer_pool_read_requests)
            print ("innodb_os_log_pending_fsyncs : %s" % innodb_os_log_pending_fsyncs )
            print ("innodb_os_log_pending_writes : %s" % innodb_os_log_pending_writes)
            print ("innodb_log_waits : %s" % innodb_log_waits )
            print ("innodb_row_lock_time : %s" % innodb_row_lock_time)
            print ("innodb_row_lock_time : %s" % innodb_row_lock_time)
        '''
        MEMORY USAGE
        '''
        self.color.text_fun("-MySQL MEMORY USAGE:","boldblue")
        read_buffer_size=self.mysql_variable("\'read_buffer_size\'")
        read_rnd_buffer_size=self.mysql_variable("\'read_rnd_buffer_size\'")
        sort_buffer_size=self.mysql_variable("\'sort_buffer_size\'")
        thread_stack=self.mysql_variable("\'thread_stack\'")
        max_connections=self.mysql_variable("\'max_connections\'")
        join_buffer_size=self.mysql_variable("\'join_buffer_size\'")
        tmp_table_size=self.mysql_variable("\'tmp_table_size\'")
        max_heap_table_size=self.mysql_variable("\'max_heap_table_size\'")
        log_bin=self.mysql_variable("\'log_bin\'")
        max_used_connections=self.mysql_variable("\'Max_used_connections\'")
        if log_bin == 'ON':
            binlog_cache_size=self.mysql_variable("\'binlog_cache_size\'")

        else:
           binlog_cache_size=0
        if int(max_heap_table_size) <= int(tmp_table_size):
            effective_tmp_table_size=max_heap_table_size
        else:
            effective_tmp_table_size=tmp_table_size
        
        per_thread_buffers=(int(read_buffer_size)+int(read_rnd_buffer_size)+int(sort_buffer_size)+int(thread_stack)+int(join_buffer_size)+int(binlog_cache_size))*int(max_connections)
        if not max_used_connections:
               max_used_connections=max_connections
        per_thread_max_buffers=(int(read_buffer_size)+int(read_rnd_buffer_size)+int(sort_buffer_size)+int(thread_stack)+int(join_buffer_size)+int(binlog_cache_size)) * int(max_used_connections)
        innodb_buffer_pool_size=self.mysql_variable("\'innodb_buffer_pool_size\'")
        if not innodb_buffer_pool_size:
            innodb_buffer_pool_size=0
        innodb_additional_mem_pool_size=self.mysql_variable("\'innodb_additional_mem_pool_size\'")
        if not innodb_additional_mem_pool_size:
            innodb_additional_mem_pool_size=0
        innodb_log_buffer_size=self.mysql_variable("\'innodb_log_buffer_size\'")
        if not innodb_log_buffer_size:
            innodb_log_buffer_size=0
        key_buffer_size=self.mysql_variable("\'key_buffer_size\'")
        query_cache_size=self.mysql_variable("\'query_cache_size\'")
        if not query_cache_size:
            query_cache_size=0
        global_buffers=int(innodb_buffer_pool_size)+int(innodb_additional_mem_pool_size)+int(innodb_log_buffer_size)+int(key_buffer_size)+int(query_cache_size)
        max_memory=int(global_buffers)+int(per_thread_max_buffers)
        total_memory=int(global_buffers)+int(per_thread_buffers)
        physical_memory=os.popen("awk '/^MemTotal/ { printf(\"%.0f\", $2*1024 ) }' < /proc/meminfo").read()
        pct_of_sys_mem=float(total_memory)*100/float(physical_memory)
        if int(pct_of_sys_mem) > 90 :
            perror=1
            txt_color="boldred"
        else:
            txt_color="black"
            perror=0
        #txt_color="boldred"
        max_memoryHR=self.forhumansize(max_memory)
        self.color.world_fun(("Max Memory Ever Allocated = %s \n"% max_memoryHR),txt_color)
        per_thread_buffersHR=self.forhumansize(per_thread_buffers)
        self.color.world_fun(("Configured Max Per-thread Buffers = %s \n"% per_thread_buffersHR),txt_color)
        global_buffersHR=self.forhumansize(global_buffers)
        self.color.world_fun(("Configured Max Global Buffers = %s \n"% global_buffersHR),txt_color)
        total_memoryHR=self.forhumansize(total_memory)
        self.color.world_fun(("Configured Max Memory Limit = %s \n"% total_memoryHR),txt_color)
        effective_tmp_table_sizeHR=self.forhumansize(effective_tmp_table_size)
        self.color.world_fun(("Plus  %s  per temporary table created \n"% effective_tmp_table_sizeHR),txt_color)
        physical_memoryHR=self.forhumansize(physical_memory)
        self.color.world_fun(("Physical Memory = %s \n"% physical_memoryHR),txt_color)
        if int(perror) == 1:
            self.color.world_fun("Max memory limit exceeds 90% of physical memory\n",txt_color)
        else:
            self.color.world_fun("Max memory limit seem to be within acceptable norms\n","green")

        if debug:
            print ("read_buffer_size : %s" % read_buffer_size )
            print ("read_rnd_buffer_size : %s" % read_rnd_buffer_size )
            print ("sort_buffer_size : %s" % sort_buffer_size )
            print ("thread_stack : %s" % thread_stack )
            print ("max_connections : %s" % max_connections )
            print ("join_buffer_size : %s" % join_buffer_size )
            print ("tmp_table_size : %s" % tmp_table_size )
            print ("max_heap_table_size : %s" %  max_heap_table_size)
            print ("log_bin : %s" % log_bin )
            print ("max_used_connections : %s" % max_used_connections )
            print ("innodb_buffer_pool_size : %s" % innodb_buffer_pool_size )
            print ("innodb_additional_mem_pool_size : %s" % innodb_additional_mem_pool_size )
            print ("innodb_log_buffer_size : %s" % innodb_log_buffer_size )
            print ("key_buffer_size : %s" % key_buffer_size )
            print ("query_cache_size : %s" % query_cache_size )

        '''
        '''


       
if __name__ == "__main__":
    app=setColor()
    app.text_banner()
    try:
        mysqlck=checkMysql()
        socket=mysqlck.check_mysql_socket()
        if not socket :
            app.world_fun("The mysqld process is not running or it is installed in a custom location.\n","boldred")
            sys.exit()
    except Exception,e:
          app.text_fun(e)
    try:
           mysqlck.mysql_info()
           #pass
    except Exception,e:
          app.text_fun(e)
          sys.exit(0)

发表评论

您的电子邮箱地址不会被公开。