博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批量查看mysql多从状态和修改多从主库指向
阅读量:7077 次
发布时间:2019-06-28

本文共 4627 字,大约阅读时间需要 15 分钟。

本脚本主要解决批量查看mysql多从状态和修改多从主库指向,并打印出执行结果。适用于主库没有做高可用或是做高可用但是V-IP没有漂移到新的主库上的问题。代码如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-import MySQLdb,sys,os,threading,timeuser = 'root'passwd = '1q2w3e4r'#mysql执行change master命令的用户名和密码def log_w(text):#写日志    logfile = "slave_res.txt"    f = open(logfile,'a+')    f.write(text)    f.close()def db_conn(host,res,flag):    text = "###################_____%s_____###################\n\n" % host    try:        conn = MySQLdb.connect(host = host,port = 6006,user = user,passwd = passwd,charset="utf8",connect_timeout = 5)        cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)        sql = '''show slave status'''        cursor.execute(sql)#查看当前同步信息        alldata = cursor.fetchall()        if len(alldata) != 0:#如果没有同步信息则抛错,退出            if  alldata[0]['Master_Log_File']==alldata[0]['Relay_Master_Log_File'] and alldata[0]['Read_Master_Log_Pos']==alldata[0]['Exec_Master_Log_Pos']:                text = text + "OK"   + '\t' + 'Master_Host:' + str(alldata[0]['Master_Host']) + '   ' + str(alldata[0]['Master_Log_File']) + '   ' + str(alldata[0]['Relay_Master_Log_File']) + '   ' + str(alldata[0]['Read_Master_Log_Pos']) + '   ' + str(alldata[0]['Exec_Master_Log_Pos']) + '   ' + str(alldata[0]['Seconds_Behind_Master'])+'\n'                if flag == '1':                    try:                        sql = "stop slave;"                        cursor.execute(sql)#停止从库同步                    except Exception, e:                        pass                    sql = '''change master to master_host='192.10.100.100',master_user='rep_slave',master_password='rEeMAKEreplication6210',master_port=6006,master_log_file='mysql-bin.000100',master_log_pos=300;'''                    cursor.execute(sql)#执行change master语句                    sql = "start slave;"                    cursor.execute(sql)#开启同步                    sql = 'show slave status'                    cursor.execute(sql)#查看最新的同步信息                    alldata = cursor.fetchall()                    if  (alldata[0]['Slave_IO_Running'] == 'Yes') and (alldata[0]['Slave_SQL_Running'] == 'Yes'):                        text = text + "OK"   + '\t' + 'Master_Host:' + str(alldata[0]['Master_Host']) + '   ' + str(alldata[0]['Master_Log_File']) + '   ' + str(alldata[0]['Relay_Master_Log_File']) + '   ' + str(alldata[0]['Read_Master_Log_Pos']) + '   ' + str(alldata[0]['Exec_Master_Log_Pos']) + '   ' + str(alldata[0]['Seconds_Behind_Master'])+'\n'                    else:                        text = text + "Start Slave Error"   + '\t' + 'Master_Host:' + str(alldata[0]['Master_Host']) + '\t' + 'Slave_IO_Running: '+str(alldata[0]['Slave_IO_Running']) + '\t' + 'Slave_SQL_Running:' + str(alldata[0]['Slave_SQL_Running']) + '\n'            else:                text = text + "Slave Error"   + '   ' + 'Master_Host:' + str(alldata[0]['Master_Host']) + '   ' + str(alldata[0]['Master_Log_File']) + '   ' + str(alldata[0]['Relay_Master_Log_File']) + '   ' + str(alldata[0]['Read_Master_Log_Pos']) + '   ' + str(alldata[0]['Exec_Master_Log_Pos']) + str(alldata[0]['Seconds_Behind_Master'])+'\n'        else:            text = text + "Error,This host not set slave information"        cursor.close()        conn.close()    except Exception, e:        text = text + "Error" + '\t' + str(e)    res.append(text)def start(flag):        threads = []        res = []        host_list = ['192.168.1.114','192.168.1.120']        for host in host_list:            t = threading.Thread(target=db_conn,args=(host,res,flag))            t.setDaemon(True)            threads.append(t)        for i in range(len(threads)):            threads[i].start()            time.sleep(0.1)        for i in range(len(threads)):            threads[i].join()        for i in res:            if "Error" in i:                print "\033[1;31;40m%s\033[0m" % i            else:                print i            log_w(i)        if flag == '1':            text = "\nChange master finished"            print text            log_w(text)        else:            text = "\nSHOW SLAVE STATUS complete"            print text            log_w(text)        text = "\n\n###################  %s   ###################\n\n" % time.strftime("%Y-%m-%d %H:%M:%S")        print text        log_w(text)def main():    print    print "请选择操作类型:\n\n0:查看所有从库的同步状态\n1:改变所有从库的主库指向\n"#.decode("utf-8").encode("GBK")    for i in range(3):        choose = raw_input('Your choose : ')        if choose == '0' or choose == '1':            start(choose)            break        else:            print "Error,please Enter right noumber again ."    printif __name__=='__main__':    main()

转载地址:http://bjdml.baihongyu.com/

你可能感兴趣的文章
轻松学习Linux之认识Shell
查看>>
Golang之interface
查看>>
SQL Server T-SQL高级查询
查看>>
Python自省(反射)指南[转]
查看>>
阿里巴巴公布了一份最新的AI成绩单
查看>>
Azure ARM (4) 开始创建ARM Resource Group并创建存储账户
查看>>
jQuery学习笔记开篇
查看>>
基于Xcode5的本地化
查看>>
【Linux高级驱动】linux设备驱动模型之平台设备驱动机制【转】
查看>>
Windows Embedded Standard开发初体验(一)
查看>>
与二进制有关的几道面试题
查看>>
这样的程序员创业有戏
查看>>
[翻译]ADO.NET Entity Framework Beta2(八)/快速入门(实体框架)(3)/生成学校实体数据模型...
查看>>
单机最大tcp连接数
查看>>
[转]LINQ是什么意思?
查看>>
计算阶乘n!
查看>>
条件表达式的短路求值与函数的延迟求值
查看>>
字符数组转换成数字
查看>>
我为NET狂官方面试题-数据库篇答案
查看>>
设计模式系列-享元模式
查看>>