#完整备份
def full_backup(backup_file_name):
os.system("[ ! -d {0}/{1} ] && mkdir -p {0}/{1}".format(backup_dir,backup_file_name))
logfile = os.path.join(backup_dir, "{0}/{1}/backuplog.log".format(backup_dir,backup_file_name))
backup_commond = ''' innobackupex --defaults-file={0} --no-lock {1}/{6} --user={2} --password={3} --host="{4}" --port={5} --tmpdir={1}/{6} --stream=xbstream --compress --compress-threads=8 --parallel=4 --extra-lsndir={1}/{6} > {1}/{6}/{6}.xbstream 2>{7} '''.\
format(cnf_file,backup_dir,user,password,host,port,backup_file_name,logfile)
execute_result = os.system(backup_commond)
return execute_result
#增量备份
def incr_backup(backup_file_name):
os.system("[ ! -d {0}/{1} ] && mkdir -p {0}/{1}".format(backup_dir, backup_file_name))
current_backup_dir = "{0}/{1}".format(backup_dir, backup_file_name)
logfile = os.path.join(backup_dir, "{0}/{1}/backuplog.log".format(backup_dir, backup_file_name))
#增量备份基于上一个增量/完整备份
incremental_basedir = get_last_backup()
backup_commond = '''innobackupex --defaults-file={0} --no-lock {6} --user={2} --password={3} --host={4} --port={5} --stream=xbstream --tmpdir={6} --compress --compress-threads=8 --parallel=4 --extra-lsndir={6} --incremental --incremental-basedir={7} 2> {8} > {6}/{9}.xbstream '''\
.format(cnf_file,backup_dir,user,password,host,port,current_backup_dir,incremental_basedir,logfile,backup_file_name)
# print(backup_commond)
execute_result = os.system(backup_commond)
return execute_result
#刷新binlog,意义不大,原本计划在完整备份之后执行一个binlog的切换,暂时弃用
def flush_log():
flush_log_commond = ''' mysql -h${0} -u${1} - p${2} -P${1} mysql - e"flush logs" '''.format(user,password,host,port)
os.system(flush_log_commond)
if __name__ == '__main__':
mysql_stat = get_mysqlservice_status()
backup_type = get_backup_type()
if mysql_stat <= 0 :
logging.info("mysql instance is inactive,backup exit")
sys.exit(1)
try:
start_time = datetime.datetime.now().strftime('%Y%m%d%_H%M%S')
logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"--------start backup")
#flush_log()
backup_file_name = start_time
execute_result = None
if(backup_type == "full"):
backup_file_name = backup_file_name+"_full"
logging.info("execute full backup......")
execute_result = full_backup(backup_file_name)
if (execute_result == 0):
logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "--------begin cleanup history backup")
logging.info("execute cleanup backup history......")
clean_expired_file()
logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "--------finsh cleanup history backup")
else:
backup_file_name = backup_file_name + "_incr"
logging.info("execute incr backup......")
execute_result = incr_backup(backup_file_name)
if(execute_result==0):
finish_time = datetime.datetime.now().strftime('%Y%m%d%_H%M%S')
backup_info = start_time+"|"+finish_time+"|"+start_time+ "_" + backup_type
with open(backupfilelist, 'a+') as f:
f.write(backup_info + '\n')
logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"--------finish backup")
else:
logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "--------xtrabackup failed.please check log")
except:
raise
sys.exit(1)