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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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

 

 
  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3. #script used in Slave Server for change server ip  
  4. import os,sys,time,socket,paramiko,MySQLdb  
  5.  
  6. def mysql_connect(ip,sql):#数据库连接  
  7.     try:  
  8.         conn = MySQLdb.connect(host = ip,user = 'repl',passwd = 'VQrtetr8',connect_timeout=5)  
  9.         cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)  
  10.         cursor.execute(sql)  
  11.         alldata = cursor.fetchall()  
  12.         return alldata  
  13.     except MySQLdb.Error,e:  
  14.         return e.args[0]  
  15.  
  16. def ssh_conm(conm):#连接主库服务器并执行命令  
  17.     host = mysql_connect('127.0.0.1',"show slave status")[0]["Master_Host"]  
  18.     #stat = mysql_chcek(host)  
  19.     username='root' 
  20.     password = '3141315' 
  21.     port = 63008 
  22.     s=paramiko.SSHClient()  
  23.     s.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
  24.     s.connect(host,port,username,password)  
  25.     stdin,stdout,stderr=s.exec_command(conm)  
  26.     result = stdout.read()  
  27.     s.close()  
  28.     return result  
  29.  
  30. def log_pos():#获取当前主从的同步位置  
  31.     result = mysql_connect('127.0.0.1',"show slave status")  
  32.     host = result[0]["Master_Host"]  
  33.     s_log = result[0]["Relay_Master_Log_File"].split('.')[1]  
  34.     s_pos = result[0]["Exec_master_log_pos"]  
  35.     result = mysql_connect(host,"show master status")  
  36.     if result == 2003:#这里是应对mysql数据库无法连接,可以选择据继续和终止脚本  
  37.         choose = raw_input('Can not connect Master,Do you go on ?  (y or n) :')  
  38.         if choose == 'y':  
  39.             return 0,0,0,0 
  40.         else:  
  41.             sys.exit(1)  
  42.     m_log = result[0]["File"].split('.')[1]  
  43.     m_pos = result[0]["Position"]  
  44.     return s_log,m_log,s_pos,m_pos  
  45.  
  46. def show():#循环5次判断主从同步是否一致  
  47.     print "Check Master-Slave now..." 
  48.     for i in range(5):  
  49.         s_log,m_log,s_pos,m_pos = log_pos()  
  50.         if s_log == m_log and s_pos == m_pos:  
  51.             print "Slave and Master is OK." 
  52.             break 
  53.         else:  
  54.             print "Slave and Master not OK,please wait moment." 
  55.             if i == 4:  
  56.                 #print "Must be show Replcation Error,Quit this script now !"  
  57.                 choose = raw_input('Master-slave not synchronous,Do you go on ?  (y or n) :')  
  58.                 if choose == 'y':  
  59.                     break 
  60.                 else:  
  61.                     sys.exit(1)  
  62.             i = i + 1 
  63.             time.sleep(5)  
  64.  
  65. def replace():  
  66.     #显示当前主从的IP,并检测主从3306是否存在  
  67.     print "Before switching IP:" 
  68.     s_ip = os.popen("cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'").read().split()[:1][0]  
  69.     print "s_ip: " + s_ip  
  70.     conm = "cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'" 
  71.     m_ip = ssh_conm(conm).split()[:1][0]  
  72.     print "m_ip: " + m_ip  
  73.     print 
  74.     #1:停用主的网卡  
  75.     conm = "ifdown eth0" 
  76.     ssh_conm(conm)  
  77.     #2: 判断主从同步是否一致,如果一致则切换,不一致则手动查看问题所在(不一致的情况重复检测5次,间隔5s,检测五次依然不同步可以选择停止脚本的执行或继续执行)  
  78.     show()  
  79.     #3:修改从IP为主的IP  
  80.     os.popen("sed -i 's/%s/%s/' /etc/sysconfig/network-scripts/ifcfg-eth0" % (s_ip,m_ip))  
  81.     print "Slave change IP is OK" 
  82.     #4:修改主IP为从的IP  
  83.     conm = "sed -i 's/%s/%s/' /etc/sysconfig/network-scripts/ifcfg-eth0" % (m_ip,s_ip)  
  84.     ssh_conm(conm)  
  85.     print "Master change IP is OK" 
  86.     #5: 显示替换之后主从的IP  
  87.     print 
  88.     print "After switching IP:" 
  89.     s_ip = os.popen("cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'").read().split()[:1][0]  
  90.     print "s_ip: " + s_ip  
  91.     conm = "cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADDR|awk -F '=' '{print $2}'" 
  92.     m_ip = ssh_conm(conm).split()[:1][0]  
  93.     print "m_ip: " + m_ip  
  94.     #6: 停止主从同步  
  95.     mysql_connect("127.0.0.1","slave stop")  
  96.     print "Slave stop OK" 
  97.     #7: 重启用主从的网卡  
  98.     print 
  99.     print "Network service restart now,please wait ......" 
  100.     conm = "ifup eth0" 
  101.     ssh_conm(conm)  
  102.     os.system("ifdown eth0")  
  103.     os.system("ifup eth0")  
  104.     print "Network reatrt OK !" 
  105.  
  106. if __name__ == "__main__":  
  107.     replace()  


本文转自 lover007 51CTO博客,原文链接:http://blog.51cto.com/wangwei007/837915 ,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5月前
|
前端开发 数据库
会议室管理系统源码(含数据库脚本)
会议室管理系统源码(含数据库脚本)
87 0
|
6月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
4月前
|
关系型数据库 MySQL Linux
实现MySQL数据库的定时自动备份脚本。
拿走,不谢,这个脚本配方(指引)保证你的数据库数据像蛋糕店一样地天天更新,还能确保老旧的蛋糕(数据)不会堆积满仓库。这下可好,数据安全有保障,数据库管理员也能轻松一点,偶尔闲下来的时候,煮杯咖啡,看个剧岂不美哉?别忘了偶尔检查一下你的自动备份是否正常工作,以防万一蛋糕机器出了点小差错。
223 20
|
5月前
|
Java 数据库
jsp CRM客户管理系统(含数据库脚本以及文档)
jsp CRM客户管理系统(含数据库脚本以及文档)
112 10
|
5月前
|
Java 关系型数据库 MySQL
Java汽车租赁系统源码(含数据库脚本)
Java汽车租赁系统源码(含数据库脚本)
90 4
|
5月前
|
监控 数据库
【YashanDB 知识库】ycm 托管数据库时报错 OM host ip:127.0.0.1 is not support join to YCM
在托管数据库时,若 OM 的 IP 被设置为 127.0.0.1,将导致无法托管至 YCM,并使数据库失去监控。此问题源于安装时修改了 OM 的监听 IP。解决方法包括:将 OM 的 IP 修改为本机实际 IP 或 0.0.0.0,同时更新 env 文件及 yasom 后台数据库中的相关配置。经验总结指出,应避免非必要的后台 IP 修改,且数据库安装需遵循规范,不使用仅限本机访问的 IP(如 127.0.0.1)。
|
6月前
|
监控 数据库
【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM
在托管数据库时,若OM的IP被设置为127.0.0.1,则不支持托管到YCM,导致数据库无法正常监控。此问题源于安装时修改了OM监听IP为127.0.0.1。解决方法为将OM的IP修改为本机实际IP或0.0.0.0,并更新yasom后台数据库中的相关配置。建议遵循规范安装,避免使用仅限本机访问的IP(如127.0.0.1),以减少潜在风险。
|
6月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
6月前
|
SQL 关系型数据库 数据库连接
|
6月前
|
监控 数据库
ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM-YashanDB
ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM-YashanDB

热门文章

最新文章

推荐镜像

更多