mysql資料庫主從正常切換IP指令碼

來源:互聯網
上載者:User

此指令碼主要用於mysql資料庫主從在正常情況下,因某種原因需要切換IP的情況下使用,主要就是切換IP,主要是通過內網切換公網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次,間隔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()  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.