xtrack mysql_mysql5.7_xtrackup_脚本

该脚本实现了MySQL数据库的全量备份、增量备份、压缩以及MD5校验功能。根据日期判断执行全量备份或增量备份,并将备份文件进行gzip压缩,同时生成MD5值以确保文件完整性。备份过程中的关键步骤通过logging模块记录,错误信息会写入日志文件。
摘要由CSDN通过智能技术生成

-- coding: utf-8 --

import time

import datetime

import subprocess

import requests

import json

import logging

my.cnf文件

cnf_file="/etc/my.cnf"

备份目录

backup_dir="/opt/back"

dt=time.strftime("%Y%m%d",time.localtime())

logging.basicConfig(level=logging.INFO,

format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,

datefmt=‘%a, %d %b %Y %H:%M:%S‘,

filename=‘/tmp/test.log‘,

filemode=‘w‘)

def back(user,dt,day,lastday):

user = user

dt = dt

day = day

lastday = lastday

full_date = [‘1‘,‘4‘,‘5‘]

success = []

fail=[]

inc_date = [‘0‘,‘2‘,‘3‘,‘6‘]

if day in full_date:

# command = ‘sudo innobackupex --defaults-file=/etc/my.cnf --login-path=%s --no-timestamp --backup /opt/back/xtra_base_%s‘ % (user,dt)

logging.info("开始全备。。。")

command = ‘sudo innobackupex --defaults-file=/etc/my.cnf --login-path={user} --no-timestamp --backup /opt/back/xtra_base_{dt}‘.format(user=user,dt=dt)

result = subprocess.Popen(command,shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE,encoding="utf-8")

# out,err = result.communicate()

# print("全out: %s" % out)

# print("全err: %s" % err)

aa = result.wait()

# logging.info(‘全备错误信息:{}‘.format(result.stderr.read()))

if aa != 0:

logging.info(‘全备错误信息:{}‘.format(result.stderr.read()))

fail.append("全备失败,请查看/tmp/test.log")

return fail

success.append("全备成功")

logging.info("开始压缩备份。。。")

print(success)

command1 = ‘sudo tar -zcvPf /opt/back/full/xtra_base_{dt}_{day}.tar.gz /opt/back/xtra_base_{dt1}/‘.format(dt=dt, day=day, dt1=dt)

print(command1)

result = subprocess.Popen(command1,shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE,encoding="utf-8")

# out, err = result1.communicate()

# print("qweq")

# print(result.wait())

# logging.info(‘压缩错误信息:{}‘.format(err))

aa = result.wait()

if aa != 0:

logging.info(‘全备压缩错误信息:{}‘.format(result.stderr.read()))

fail.append("全备压缩失败,请查看/tmp/test.log")

return fail

logging.info("开始生成md5值。。。")

success.append("压缩成功")

command = ‘sudo md5sum /opt/back/full/xtra_base_%s_%s.tar.gz > /opt/back/full/xtra_base_%s_%s.md5‘ % (dt, day, dt, day)

result = subprocess.Popen(command, shell=True,stderr=subprocess.PIPE, stdout=subprocess.PIPE,encoding="utf-8")

# out, err = result.communicate()

# print(result.wait())

# logging.info(‘MD5失败信息:{}‘.format(err))

aa = result.wait()

print(aa)

if aa != 0:

logging.info(‘全量MD5失败信息:{}‘.format(result.stderr.read()))

fail.append(‘全量MD5失败,请查看/tmp/test.log‘)

return fail

success.append(‘压缩包MD5值生成成功‘)

else:

command = ‘sudo innobackupex --defaults-file=/etc/my.cnf --login-path=%s --no-timestamp --incremental --backup --incremental-basedir=/opt/back/xtra_base_%s /opt/back/xtra_inc_%s‘ % (user, lastday, dt)

result = subprocess.Popen(command,shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

aa = result.wait()

if aa != 0:

logging.info(‘增量备份失败信息:{}‘.format(result.stderr.read()))

fail.append("增量备份失败,请查看/tmp/test.log")

return fail

success.append("增量备份成功")

command = ‘sudo tar -zcvPf /opt/back/inc/xtra_inc_%s_%s.tar.gz /opt/back/xtra_inc_%s/‘ % (dt, day, dt)

result = subprocess.Popen(command,shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

aa = result.wait()

if aa != 0:

logging.info(‘增量备份压缩失败信息:{}‘.format(result.stderr.read()))

fail.append("增量备份压缩失败,请查看/tmp/test.log")

return fail

success.append("增量备份压缩成功")

command = ‘sudo md5sum /opt/back/inc/xtra_inc_%s_%s.tar.gz > /opt/back/inc/xtra_inc_%s_%s.md5‘ % (dt, day, dt, day)

result = subprocess.Popen(command,shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

aa = result.wait()

if aa != 0:

logging.info(‘增量备份md5失败信息:{}‘.format(result.stderr.read()))

fail.append("增量备份md5失败,请查看/tmp/test.log")

return fail

success.append("增量备份MD5值计算成功")

if len(success) == 3:

result = "备份成功"

return result

else:

print(fail)

result = "备份失败"

return result

program = {

"msgtype": "text",

"text": {

#"content": Exception_interface

"content": "mysql_backup: %s" % (results)

},

}

# print(program)

headers = {‘Content-Type‘: ‘application/json‘}

f = requests.post(url, data=json.dumps(program), headers=headers)

if name == "main":

mysql备份账户

user = "backtest1"

dt = time.strftime("%Y%m%d", time.localtime())

now_time = datetime.datetime.now()

lastday = (now_time + datetime.timedelta(days=-1)).strftime("%Y%m%d")

day = time.strftime("%w", time.localtime())

dinging(back(user, dt, day, lastday))

原文:https://blog.51cto.com/1054054/2472906

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值