xtrabackup备份脚本python编写
import os
import subprocess
import logging
import time
from .ssh_client import MySshClient
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
backup_base='/home/backup'
def create_backup_base(ip):
my_ssh_client = MySshClient()
cmd='mkdir -p %s'%(backup_base)
my_ssh_client.ssh_interactive(ip,cmd)
logger.info('confirm create backup base no matter it if exists before')
def full_backup_database(ip,db_port):
my_ssh_client = MySshClient()
bktimstamp=time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())
backupdir='%s/%s-mysql%s-%s'%(backup_base,ip,db_port,bktimstamp)
cmd='mkdir %s'%backupdir
my_ssh_client.ssh_interactive(ip,cmd)
cmd="xtrabackup --defaults-file=/etc/my%s.cnf -H %s -P %s -udbadmin -pdbadmin --backup --target-dir=%s >%s/backup.log 2>&1 &"%(db_port,ip,db_port,backupdir,backupdir)
my_ssh_client.ssh_interactive(ip,cmd)
return backupdir
def copy_backup2manger(ip,db_port):
managerdir='/home/backup'
backupdir=full_backup_database(ip,db_port)
while True:
cmd='ssh %s ps -ef|grep -i xtrabackup|grep -v grep|wc -l'%(ip)
(status,res)=subprocess.getstatusoutput(cmd)
if int(res)==0:
break
else:
logger.info('xtrabackup is running please wait')
cmd='scp -r %s:%s %s'%(ip,backupdir,managerdir)
os.system(cmd)
logger.info('xtrabackup file has been transported to the manage host')
print(managerdir+'/'+backupdir.split('/')[-1])
return managerdir+'/'+backupdir.split('/')[-1]
if __name__=='__main__':
ip=input('please input your backup target machine ip:')
port=input('please input your backup target mysql port:')
create_backup_base(ip)
copy_backup2manger(ip, port)