MySQL主从复制python安装

								MySQL主从复制python安装
import  os
import  sys
import configparser
import subprocess
import logging
import  multiprocessing
import time
import  re
from .mysql_single_install import MySQL_Single_Install,full_single_install
from .ssh_client import MySshClient
from . import  xtrabackup_master
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
class MySQL_Multi_Install(object):
    def __init__(self,source_ip,target_ip,db_port,mbd):
        self.source_ip=source_ip
        self.target_ip=target_ip
        self.db_port=db_port
        self.mbd=mbd
        self.msi=MySQL_Single_Install(self.target_ip,self.db_port)
    def copy_backup2sla(self):
        xtrabackup_master.create_backup_base(self.source_ip)
        managerbackupdir=self.mbd
        cmd='scp -r %s %s:/tmp/'%(managerbackupdir,self.target_ip)
        os.system(cmd)
        logger.info('xtrabackup has transport from manager machine to slave machine')
        return '/tmp/'+managerbackupdir.split('/')[-1]

    def xtra_apply(self):
        my_ssh_client = MySshClient()
        self.msi.check_datadir()
        targetdir=self.copy_backup2sla()
        cmd='xtrabackup --defaults-file=/etc/my%s.cnf -udbadmin --prepare --target-dir=%s'%(self.db_port,targetdir)
        my_ssh_client.ssh_interactive(self.target_ip,cmd)
        cmd='xtrabackup --defaults-file=/etc/my%s.cnf -udbadmin --copy-back  --target-dir=%s'%(self.db_port,targetdir)
        my_ssh_client.ssh_interactive(self.target_ip, cmd)
        self.msi.dir_chown()
        self.msi.start_mysql()
        return targetdir

    def config_slave(self):
        targetdir=self.xtra_apply()
        cmd="ssh %s cat %s/xtrabackup_info |grep binlog_pos|awk -F 'filename' '{print $2}'|awk  -F ', position' '{ print $1,$2}'|sed 's/'\"'\"/'''/g'|awk '{print $1,$2}'"%(self.target_ip,targetdir)
        (status,res)=subprocess.getstatusoutput(cmd)
        print(status,res)
        (binlog,pos)=res.split(' ')
        logger.info('slave has get primary pos and binlog')
        self.msi.check_installtempfile()
        my_ssh_client = MySshClient()
        cmd="/usr/local/mysql/bin/mysql  -udbadmin -p'dbadmin' -h %s -P %s -e\"CHANGE MASTER TO master_host='%s', master_port=%s, master_user='repl',master_password='repl2data', master_log_file='%s', master_log_pos=%s;start replica;\">/tmp/mysqlinstalltemp.txt 2>&1"%(self.target_ip,self.db_port,self.source_ip,self.db_port,binlog,pos)
        my_ssh_client.ssh_interactive(self.target_ip,cmd)
        res = my_ssh_client.ssh_interactive(self.target_ip, 'cat /tmp/mysqlinstalltemp.txt |grep ERROR|wc -l')
        count = 0
        while True:
            if int(res) > 0 and count <= 5:
                logger.info('again start slave')
                time.sleep(10)
                my_ssh_client.ssh_interactive(self.target_ip, cmd)
                res = my_ssh_client.ssh_interactive(self.target_ip, 'cat /tmp/mysqlinstalltemp.txt |grep ERROR|wc -l')
                count += 1
            elif count>5 and int(res) > 0:
                logger.error('start slave failed')
                break
            else:
                my_ssh_client.ssh_interactive(self.target_ip, 'rm -rf /tmp/mysqlinstalltemp.txt')
                logger.info('start slave success')
                break
def full_multil_install(source_ip,target_ip_list,db_port):
    full_single_install(source_ip,db_port)
    managerbackupdir = xtrabackup_master.copy_backup2manger(source_ip, db_port)
    try:
        for sla_ip in target_ip_list:
            print(target_ip_list)
            print("slave ip is %s"%sla_ip)
            msi=MySQL_Single_Install(sla_ip,db_port)
            msi.check_mysqlbasedir_exists()
            msi.check_mysql_user()
            msi.conf_defined()
            mmi = MySQL_Multi_Install(source_ip, sla_ip, db_port, managerbackupdir)
            mmi.config_slave()
            msi.set_osenv()
        return '200'
    except Exception as e:
        print(e)
        sys.exit()









if __name__=='__main__':
    pass
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值