2套mysql主从互切脚本

由于mysql主主会出现些问题,比如幻读等,于是主从同步出现主故障时,需主从互切,刚好正在学python就用python写了个主从互切脚本,开始也有用shell写。

主要步骤为:

从上:stop slave

flush logs

再利用 show master status\G取二进制日志和位置为变量

主上:stop slave

然后用change master来切到从(利用上面的变量)

start slave

然后show slave status\G判断

下面为shell写的主从互切脚本  (在从mysql上操作,可进一步研究)

#!/bin/bash

#coding=utf-8

#author=min

#date=2015.10.16

#use:change slave to master when master was bad

master_ip=192.168.1.136                      # source master ip

slave_ip=192.168.1.134                       # source slave ip

root_passwd=******                           # root‘password for logining myself mysql

user=paixian                                 # user to login master‘s mysql

passwd=********                         # password for user to login master‘s mysql

master_user=myslave                          # user to change master for master‘s mysql

master_password=********                      # user‘s password to change master for master‘s mysql

master_host=$(mysql -uroot -p$root_passwd -e ‘show slave status\G‘|grep Master_Host|awk -F‘: ‘ ‘{print $2}‘)  2>/dev/null #find the master host now

#echo $master_host    #to test the master host

[ $master_host = $master_ip ] && slave_host=$slave_ip || slave_host=$master_ip  2>/dev/null #definition the slave host

#echo $slave_host     #to test the slave host            

mysql -uroot -p$root_passwd -e ‘stop slave‘ 2>/dev/null  #stop the mysql slave thread
#echo $?1   #test the stop slave is yes or ok
mysql -uroot -p$root_passwd -e ‘flush logs‘   2>/dev/null #flush the binlogs

#echo $?2                                       #test flush logs is ok or no

bin_log=$(mysql -uroot -p$root_passwd -e ‘show master status\G‘|grep File|awk -F‘: ‘ ‘{print $2}‘) 2>/dev/null #find the master_log_file

#echo $bin_log   #test the master_log_file

pos=$(mysql -uroot -p$root_passwd -e ‘show master status\G‘|grep Position|awk -F‘: ‘ ‘{print $2}‘) 2>/dev/null #find the master_log_pos

#echo $pos     #test the master_log_pos

mysql -u$user -p$passwd -h$master_host -e "stop slave" 2>/dev/null #stop the mysql slave thread

#echo $?3      #03 ok   13 no   to test the stop slave threa is ok?   

mysql -u$user -p$passwd -h$master_host -e "change  master to master_host=‘$slave_host‘,master_user=‘$master_user‘,master_password=‘$master_password‘,master_log_file=‘$bin_log‘,master_log_pos=$pos" 2>/dev/null #change slave to master 

#echo $?4      #04 ok  14 no    to test the change slave to master is ok?

mysql -u$user -p$passwd -h$master_host -e "start slave"   2>/dev/null  #slave start  slave  thread

#echo $?5      #05 ok   15 no   to test the start slave thread is ok?

mysql -u$user -p$passwd -h$master_host -e "show slave status\G" 2>/dev/null #slave show slave status

#echo $?6  #06 ok 16 no  to test slave status

下面为python写的主从互切脚本(能在管理mysql的服务器上操作)

#!/usr/sbin/python
# ^-^ coding: utf-8 ^-^
# ^-^ author: chen min ^-^
# ^-^ time: 2015-10-22 ^-^
import MySQLdb
slave=raw_input(‘please input slave_ip:‘)
if slave==‘192.168.1.134‘:
    master=‘192.168.1.136‘
else:
    master=‘192.168.1.134‘
global slave,master

def getpos():
    conn = MySQLdb.Connect(
        host = ‘%s‘%slave,
        port = 3306,
        db = ‘test‘,
        user = ‘paixian‘,
        passwd = ‘***********‘,
        charset = ‘utf8‘
    )
    cursor = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
    try:
#        print slave,master,type(slave)
        cursor.execute("stop slave")
        cursor.execute("flush logs")
        sql = "show master status"
        n = cursor.execute(sql)
        a = cursor.fetchall()
        bin_log = a[0].get(‘File‘)
        pos = a[0].get(‘Position‘)
        global bin_log,pos
        conn.commit()
    except Exception as e:
        print e
    finally:
        cursor.close()
        conn.close()

def changeslave():
    conn1 = MySQLdb.Connect(
        host = ‘%s‘%master,
        port = 3306,
        db = ‘test‘,
        user = ‘paixian‘,
        passwd = ‘***********‘,
        charset = ‘utf8‘
    )
    cursor1=conn1.cursor(cursorclass=MySQLdb.cursors.DictCursor)
    try:
#        print bin_log,pos,slave,master
        cursor1.execute("stop slave")
        cursor1.execute("change master to master_host=‘%s‘, master_user=‘myslave‘, master_password=‘123123‘, master_log_file=‘%s‘, master_log_pos=%d"%(slave,bin_log,pos))
        cursor1.execute("start slave")
        m = cursor1.execute("show slave status")
        m1 = cursor1.fetchall()
        y = m1[0].get(‘Slave_IO_Running‘)
        x = m1[0].get(‘Slave_SQL_Running‘)
#        print x,y
        if x==‘Yes‘ and y==‘Yes‘:
            print "slave to master is ok"
        conn1.commit()
    except Exception as e:
        print e
    finally:
        cursor1.close()
        conn1.close
        

try:
    getpos()
    changeslave()
except Exception as e:
    print e
时间: 2024-10-25 08:36:45

2套mysql主从互切脚本的相关文章

mysql主从同步监控脚本

mysql主从同步监控脚本,利用mysql从库中的IO和SQL进程以及延迟时间来监控主从同步是否正常,详细shell脚本如下: #!/bin/bash #author wangning #date 2017-7-17 #qq 1198143315 #Email [email protected] ################################## define variable############################# define_variable(){ ip

MySQL主从自动配置脚本

通过yum安装mariadb,并配置MySQL主从服务器主服务器:192.168.10.11从服务器:192.168.10.12 #!/bin/bash #==================================================== # Author: Mr.Song # Create Date: 2019-02-21 # Description: auto config MySQL master&slave #============================

MySQL 主从延迟监控脚本(pt-heartbeat)

对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现.pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟.本文主要是通过脚本来定期检查从库与主库复制的延迟度并发送邮件,供大家参考. 有关pt-heartbeat工具的安装可以参考:percona-toolkit的安装及简介    有关pt-heartbeat工具的介绍可以参考:使用pt-heartbeat监控主从复制延

Mysql主从状态监控脚本

目标:对Mysql从库进行状态监控,如果从库复制异常就告警 思路: 1.首先查找Mysql从库的4个参数值(show slave status根据这个命令):分别是从库的IO线程.SQL线程.复制延迟时间(这个在以下脚本没用到,可以再写个脚本对其延迟进行告警).错误码 2.函数Mysql_status判断,对IO线程.SQL线程.错误码三者逻辑与判断 3.如果为假则执行函数Mysql_Errno 4.对于mysql错误码为1158 1159 1008 1007 1062 我们可以进行停止slav

mysql主从状态监控脚本报警脚本

#!/bin/bash MYSQLPORT=`netstat -antlp |grep "LISTEN" ` |grep "3306" |awk -F[:""]+  '{print $4}' MYSQLIP = `ifconfig eth0` |grep "inet addr" |awk -F[:""]+ '{print $4}' STATUS = $(/usr/local/mysql/bin/mysql

mysql 主从同步详细配置教程

8.10 Mysql 主从同步 8.10.1 主从原理mysql主从同步的原理:1.在master上开启bin-log日志,用于记录master上的更改删的一些记录.2.主从各开启io线程,从上开启io线程和sql线程.同时都配置好主从上的serveid唯一性3.主上配置好授权用户,从上设置change master授权连接的命令3. 从上io线程通过授权连接master,master通过io线程检查到slav的请求的日志.postsion点位置.4.master将这些相应的请求内容发送给sla

window 平台下mysql主从的监控(window执行计划配合vb脚本)

(1)在window上安装ODBC(vb链接MySQL的驱动程序) 下载地址为:http://dev.mysql.com/downloads/connector/odbc/ 根据window系统选择相应版本即可. 我安装的是mysql-connector-odbc-5.3.4 如果在安装mysql-connector-odbc-5.3.4报错了, Error 1918.Error installing ODBC driver Mysql ODBC 5.3 ANSI Driver,ODBC err

监控mysql主从脚本

一.下载并解压sendEmail cd /usr/local/src wget tar -zxvf sendEmail-v1.56.tar.gz cp sendEmail-v1.56/sendEmail /usr/local/bin/     拷贝之后就能用了 发邮件命令: sendEmail [email protected] -t [email protected] -s smtp.163.com -u "test"-xu zhang_peicheng -xp xxxxxxxxxx

Mysql主从搭建脚本

前言:(1)该脚本可在任意路径运行,只需能够连接外网,会自动下载所需软件包并安装.            (2)该脚本内mysql版本为mysql-5.6.25.            (3)为提高脚本自由度,该脚本部署中,需要手动指定IP.同步用户名.同步密码,安装中按照提示输入即可.        别的就不多说啦,大家自己体验吧,欢迎意见和批评 ! 图解如下:     (1)主菜单     主菜单选项如下图,共7个选项,可输入该选项内容分别执行选项中的内容.其中可输入help查看帮助,可输入