Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 编程 > Python > 正文

mysql数据库主从正常切换IP脚本

时间:2016-06-26 18:47 来源:网络整理 作者:linux系统 阅读:

mysql数据库主从正常切换IP脚本

时间:2013-08-07 00:31来源:51cto.com博客 作者:lover007 的BLOG 举报 点击:次

 此脚本主要用于mysql数据库主从在正常情况下,因某种原因需要切换IP的情况下使用,主要就是切换IP, 【linux教程】 ,主要是通过内网切换公网IP,脚本代码如下:

#!/usr/bin/env python # -*- coding: utf-8 -*- #script used in Slave Server for change server ip import os,sys,time,socket,paramiko,MySQLdb def mysql_connect(ip,sql):#数据库连接 try: conn = MySQLdb.connect(host = ip,user = 'repl',passwd = 'VQrtetr8',connect_timeout=5) cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor) cursor.execute(sql) alldata = cursor.fetchall() return alldata except MySQLdb.Error,e: return e.args[0] def ssh_conm(conm):#连接主库服务器并执行命令 host = mysql_connect('127.0.0.1',"show slave status")[0]["Master_Host"] #stat = mysql_chcek(host) username='root' password = '3141315' port = 63008 s=paramiko.SSHClient() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect(host,port,username,password) stdin,stdout,stderr=s.exec_command(conm) result = stdout.read() s.close() return result def log_pos():#获取当前主从的同步位置 result = mysql_connect('127.0.0.1',"show slave status") host = result[0]["Master_Host"] s_log = result[0]["Relay_Master_Log_File"].split('.')[1] s_pos = result[0]["Exec_master_log_pos"] result = mysql_connect(host,"show master status") if result == 2003:#这里是应对mysql数据库无法连接,可以选择据继续和终止脚本 choose = raw_input('Can not connect Master,Do you go on ? (y or n) :') if choose == 'y': return 0,0,0,0 else: sys.exit(1) m_log = result[0]["File"].split('.')[1] m_pos = result[0]["Position"] return s_log,m_log,s_pos,m_pos def show():#循环5次判断主从同步是否一致 print "Check Master-Slave now..." for i in range(5): s_log,m_log,s_pos,m_pos = log_pos() if s_log == m_log and s_pos == m_pos: print "Slave and Master is OK." break else: print "Slave and Master not OK,please wait moment." if i == 4: #print "Must be show Replcation Error,Quit this script now !" choose = raw_input('Master-slave not synchronous,Do you go on ? (y or n) :') if choose == 'y': break else: sys.exit(1) i = i + 1 time.sleep(5) def replace(): #显示当前主从的IP,并检测主从3306是否存在 print "Before switching IP:" s_ip = os.popen("cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'").read().split()[:1][0] print "s_ip: " + s_ip conm = "cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'" m_ip = ssh_conm(conm).split()[:1][0] print "m_ip: " + m_ip print #1:停用主的网卡 conm = "ifdown eth0" ssh_conm(conm) #2: 判断主从同步是否一致,如果一致则切换,不一致则手动查看问题所在(不一致的情况重复检测5次, 【linux操作系统】 【51运维网】 ,间隔5s,检测五次依然不同步可以选择停止脚本的执行或继续执行) show() #3:修改从IP为主的IP os.popen("sed -i 's/%s/%s/' /etc/sysconfig/network-scripts/ifcfg-eth0" % (s_ip,m_ip)) print "Slave change IP is OK" #4:修改主IP为从的IP conm = "sed -i 's/%s/%s/' /etc/sysconfig/network-scripts/ifcfg-eth0" % (m_ip,s_ip) ssh_conm(conm) print "Master change IP is OK" #5: 显示替换之后主从的IP print print "After switching IP:" s_ip = os.popen("cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'").read().split()[:1][0] print "s_ip: " + s_ip conm = "cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'" m_ip = ssh_conm(conm).split()[:1][0] print "m_ip: " + m_ip #6: 停止主从同步 mysql_connect("127.0.0.1","slave stop") print "Slave stop OK" #7: 重启用主从的网卡 print print "Network service restart now,please wait ......" conm = "ifup eth0" ssh_conm(conm) os.system("ifdown eth0") os.system("ifup eth0") print "Network reatrt OK !" if __name__ == "__main__": replace()

------分隔线----------------------------

  • 上一篇:Python 常用字符串操作
  • 下一篇:检查mysql数据库主从重要表的数据一致性
  • 感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《mysql数据库主从正常切换IP脚本》技术文章,《mysql数据库主从正常切换IP脚本》详细使用和说明,有时《mysql数据库主从正常切换IP脚本》可能不完善、敬请谅解!如果《mysql数据库主从正常切换IP脚本》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    验证码:点击我更换图片