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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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 ,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之用脚本的方式同步数据到MySQL,怎么指定列作为目标表为唯一行
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
12天前
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
37 0
|
5天前
|
运维 关系型数据库 MySQL
Serverless 应用引擎产品使用合集之如何配置MySQL的白名单IP
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之数据源同步时,使用脚本模式采集mysql数据到odps中,使用querySql方式采集数据,在脚本中删除了Reader中的column,但是datax还是报错OriginalConfPretreatmentUtil - 您的配置有误。如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
11天前
|
关系型数据库 MySQL 数据库连接
mysql报错:Host‘IP地址‘ isblocked because of many connection errors;unblock with ‘mysqladmin flush-hosts‘
mysql报错:Host‘IP地址‘ isblocked because of many connection errors;unblock with ‘mysqladmin flush-hosts‘
|
11天前
|
Ubuntu 关系型数据库 MySQL
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
|
11天前
|
关系型数据库 MySQL 数据安全/隐私保护
windows系统bat批处理 mysql 脚本启动关闭
windows系统bat批处理 mysql 脚本启动关闭
|
11天前
|
关系型数据库 MySQL Linux
centos linux mysql 5.5脚本全自动源码包 编译安装
centos linux mysql 5.5脚本全自动源码包 编译安装
|
1月前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
52 3
|
1月前
|
关系型数据库 MySQL Linux
本地虚拟机centos7通过docker安装主从mysql5.7.21
本地虚拟机centos7通过docker安装主从mysql5.7.21
51 0

推荐镜像

更多