ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MariaDB 백업 스크립트
    Python 2020. 2. 12. 22:32

    MariaDB를 백업하기 위해 Marai-backup을 사용하여 백업하는 스크립트 입니다.

    사용하기에 앞서 Mariabackup이 설치되어 있어야 합니다.

     

    백업은 하루에 한번 백업을 하고, 일주일에 한번 Full백업을 하는 요구 조건이 있었습니다.

    Full백업 이후에는 증분 백업을 하게 작성하였습니다.

     

    해당 스크립트는 파이썬 2.6버전에서 테스트 하였습니다.

     

    [사용방법]

    데이터베이스 백업 계정을 생성하여 DB_USER 과 DB_PASS 부분을 넣어서 사용하면 됩니다.

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    ##########################################################################
    # NAME          : db_backup.py
    # LAST UPDATE   : 2019-02-14
    # Verersion     : 1.0
    ##########################################################################
    import datetime
    import commands
    import os
    import sys
    
    ### 기본 설정 
    DB_USER = ''
    DB_PASS = ''
    FULL_BACKUP_DIR = '/data/backup/full/'
    INC_BACKUP_DIR = '/data/backup/inc/'
    FULL_DAY = 0 # 0 = Monday, 6 = Sunday
    
    ### 날짜 관련 함수 
    now = datetime.datetime.now()
    week = now.weekday()
    ###
    
    # 설정한 요일에 Full Backup
    def maria_backup():
        if week == FULL_DAY:
            print(' === Full Backup ===')
            os.system('mariabackup --backup --compress --no-lock --target-dir=' + FULL_BACKUP_DIR + str(now.strftime("%Y-%m-%d_%H:%M:%S")) + ' --user=' + DB_USER + ' --password=' + DB_PASS)
    
    # 다른 날일 경우 증분 백업
        else:
            print('===Increment Backup===')
            full_cmd = ('ls -r /data/backup/full/ | sed -n 1p')
            inc_cmd = ('ls -r /data/backup/inc/ | sed -n 1p')
            last_full_backup = commands.getoutput(full_cmd)
            last_inc_backup = commands.getoutput(inc_cmd)
    
    # Full 백업이 존재하지 않으면 Full 백업
            if last_full_backup == '':
                print('Full 백업이 존재하지 않습니다.')
                os.system('mariabackup --backup --compress --no-lock --target-dir=' + FULL_BACKUP_DIR + str(now.strftime("%Y-%m-%d_%H:%M:%S")) + ' --user=' + DB_USER + ' --password=' + DB_PASS)
                sys.exit();
    
    # 증분 백업이 존재하지 않으면 Full 백업을 기준으로 증분 백업
            if last_inc_backup == '':
                print('마지막 증분 백업이 존재하지않습니다.')
                print('full 백업으로 증분 백업')
                os.system('mariabackup --backup --compress --no-lock --target-dir=' + INC_BACKUP_DIR + str(now.strftime("%Y-%m-%d_%H:%M:%S")) + ' --incremental-basedir=' + FULL_BACKUP_DIR + last_full_backup + ' --user=' + DB_USER + ' --password=' + DB_PASS)
                sys.exit()
    # Full 백업과 증분백업의 날짜를 비교 Full 백업의 날짜가 오래됐을 경우 Full 백업을 기준으로 증분 백업을 진행
    # 증분 백업의 날짜가 오래됬을 경우 증분 백업을 기준으로 증분 백업 진행
            convert_inc = datetime.datetime.strptime(last_inc_backup, "%Y-%m-%d_%H:%M:%S").date()
            convert_full = datetime.datetime.strptime(last_full_backup, "%Y-%m-%d_%H:%M:%S").date()
            if convert_full > convert_inc:
                print('full 백업으로 증분 백업')
                os.system('mariabackup --backup --compress --no-lock --target-dir=' + INC_BACKUP_DIR + str(now.strftime("%Y-%m-%d_%H:%M:%S")) + ' --incremental-basedir=' + FULL_BACKUP_DIR + last_full_backup + ' --user=' + DB_USER + ' --password=' + DB_PASS)
            else :
                print('증분 백업 기준 증분 백업')
                os.system('mariabackup --backup --compress --no-lock --target-dir=' + INC_BACKUP_DIR + str(now.strftime("%Y-%m-%d_%H:%M:%S")) + ' --incremental-basedir=' + INC_BACKUP_DIR + last_inc_backup + ' --user=' + DB_USER + ' --password=' + DB_PASS)
    
    maria_backup()

     

    [다운로드]

    https://github.com/bluewins/python-script/mariadb_backup.py

     

    bluewins/python-script

    파이썬 스크립트. Contribute to bluewins/python-script development by creating an account on GitHub.

    github.com

     

    백업에 필요한 옵션이 있을 경우 확인하여서 수정하시면 됩니다.

     

    https://mariadb.com/kb/en/mariabackup-options/

     

    Mariabackup Options

    Options for Mariabackup.

    mariadb.com

     

    'Python' 카테고리의 다른 글

    Linux Disk 용량 확인 스크립트 with SLACK  (0) 2020.02.12
Copyright 2020. bluewins All Rights Reserved.