pyton检查mysql主从数据一致性的代码

发布时间:2020-02-02编辑:脚本学堂
分享一例python代码,用于检查msyql数据库主从中表的数据是否一致,并介绍了在python中读取ini配置文件的方法,有需要的朋友参考下。

脚本的功能:
检查mysql/ target=_blank class=infotextkey>mysql数据库主从重要表的数据一致性,在主从正常的情况下,连接数据库统计表的条数是否一致。
脚本分为两部分,一个是py脚本,一个是ini配置文件。

1,py脚本:
 

复制代码 代码示例:
#!/usr/bin/env python 
#This script is used check mysql replcation some table 
# -*- coding: utf-8 -*-
#site: www.jb200.com
#
import sys,time,MySQLdb,threading 
import ConfigParser 
 
class Check: 
    def __init__(self): 
        self.w =[] 
        self.table = table 
    def conf(self): 
        fp = ConfigParser.ConfigParser() 
        fp.readfp(open('config.ini')) 
        iplist = fp.get("global", "iplist") 
        return iplist 
 
    def wd(self,table): 
        iplist = self.conf() 
        hostlist = [] 
        self.w = [] 
        threads = [] 
        for i in iplist.split(";"): 
            hostlist.append(i.split(",")) 
        for i in range(len(hostlist)): 
            host = hostlist[i][0] 
            hostname = hostlist[i][1] 
            t = threading.Thread(target=self.mysql_check,args=(host,hostname,i)) 
            threads.append(t) 
            t.start() 
            time.sleep(0.05) 
        for i in range(len(hostlist)): 
            threads[i].join() 
        self.w.sort() 
        for r in range(len(self.w)): 
            print self.w[r] 
 
    def mysql_check(self,host,hostname,i): 
        try: 
            conn = MySQLdb.connect(host = host,user = 'user',passwd = 'passwd',connect_timeout=5) 
            cursor = conn.cursor()  
            sql = "SELECT COUNT(*) FROM %s" % self.table 
            cursor.execute(sql) 
            alldata = cursor.fetchall() 
            count = alldata[0][0] 
            value = hostname + "t" + str(count) 
            self.w.append(value) 
        except: 
            print "Can not Connect to " + host + " mysql server"
            return 0
 
if __name__ == "__main__":  
    table_list = ['adb.credit_log','adb.account','ddb.data'] 
    for i in range(len(table_list)): 
        table = table_list[i] 
        print "Table Count:  " + table 
        print
        boss = Check() 
        boss.wd(table) 
        print

2,config.ini文件格式:
 

复制代码 代码示例:
[global] 
iplist = 192.168.50.1,沧海一笑_adb(主);192.168.50.2,沧海一笑_adb(从);192.168.50.3,落英缤纷_adb(主);192.168.50.4,落英缤纷_adb(从)
 执行结果如下:
Table Count:  adb.credit_log
沧海一笑_adb(从) 1485149
沧海一笑_adb(主) 1485149
开天辟地_adb(从) 877838
开天辟地_adb(主) 877838
落英缤纷_adb(从) 1484796
落英缤纷_adb(主) 1484796
如虎添翼_adb(从) 1166470
如虎添翼_adb(主) 1166470
天地雄心_adb(从) 609058
天地雄心_adb(主) 609058
天罡北斗_adb(从) 1106899
天罡北斗_adb(主) 1106899
Table Count:  adb.account
沧海一笑_adb(从) 4295144
沧海一笑_adb(主) 4295144
开天辟地_adb(从) 1386242
开天辟地_adb(主) 1386242
落英缤纷_adb(从) 2608761
落英缤纷_adb(主) 2608761
如虎添翼_adb(从) 1678627
如虎添翼_adb(主) 1678627
天地雄心_adb(从) 2733346
天地雄心_adb(主) 2733346
天罡北斗_adb(从) 3925829
天罡北斗_adb(主) 3925829
Table Count:  ddb.data
沧海一笑_adb(从) 19026601
沧海一笑_adb(主) 19026601
开天辟地_adb(从) 8131988
开天辟地_adb(主) 8131988
落英缤纷_adb(从) 11684648
落英缤纷_adb(主) 11684648
如虎添翼_adb(从) 8529377
如虎添翼_adb(主) 8529377
天地雄心_adb(从) 11533682
天地雄心_adb(主) 11533682
天罡北斗_adb(从) 15381099
天罡北斗_adb(主) 15381099