데이터를 주기적으로 백업하는 일은 DBA에게 있어 중요한 업무 루틴 중 하나라고 생각한다.
(언제, 어떤 데이터의 복구 작업이 필요할지 알 수 없으므로 주기적으로 데이터를 백업할 필요가 있다)
이처럼 주기적인 데이터 백업을 수행할 때마다 DB 서버에 접속하여 백업 명령어를 일일이 수기로 작성하여 데이터를 백업해야 한다.
하지만 위 방법은 주기적으로 발생하는 반복 작업이기 때문에, 백업 스크립트를 작성한 뒤 스케줄러로 등록하는 방법이 가장 효율적인 방법이라 생각한다.
아래 두 과정을 거치면 자동 백업을 간단하게 적용/실행할 수 있다.
백업 디렉터리 생성
1-1. 데이터 백업 디렉터리
1-2. 데이터 백업 로그 디렉터리 및 로그 파일
백업 스크립트 작성
리눅스 스케줄러 등록
# 데이터 백업 디렉터리 생성 mkdir -p /backup/mysql/daily_full_backup # 로그 디렉터리 생성 mkdir -p /backup/mysql/log # 로그 파일 생성 touch /backup/mysql/log/backup.log
스크립트 파일의 경로는 상황에 따라(회사의 정책 및 규칙에 따라) 다르게 지정할 수 있다.
# 스크립트 생성 및 편집 vi /usr/local/bin/mysql_daily_backup.sh
[스크립트 내용]
2>> ${LOG_FILE}: 표준 에러 발생 시 로그파일(backup.log)끝에 에러 추가-mtime +7: 수정된 지 7일 보다 오래된 파일-exec rm -f {} \;:rm명령어 실행
{ }:find가 찾은 파일명\;:-exec옵션의 끝을 의미-f: 강제 삭제#!/bin/bash #------------------------------------------------------------------------------------------------------------------------------------------- # 파 일 명 : /usr/local/bin/mysql_daily_backup.sh # 설 명 : 매일 모든 데이터베이스 백업, 7일 전 백업 파일은 자동 삭제 # 작 성 자 : 김철수 # 작 성 일 : 2025.07.04 # 수 정 자 : - # 수 정 일 : - # 수 정 사 유: - #------------------------------------------------------------------------------------------------------------------------------------------- #------------------------------------------------------------------------------------------------------------------------------------------- # 백업 변수 선언 START #------------------------------------------------------------------------------------------------------------------------------------------- # MySQL 계정 정보 MYSQL_USER="@@@@" MYSQL_PWD="@@@@" # 날짜 변수 TODAY=$(date +"%Y%m%d") # 백업 위치 BACKUP_DIR="/backup/mysql/daily_full_backup" # 백업 로그 위치 LOG_FILE="/backup/mysql/log/backup.log" # 백업 파일명 BACKUP_FILE="${BACKUP_DIR}/${TODAY}_full_backup.sql" #------------------------------------------------------------------------------------------------------------------------------------------- # 백업 변수 선언 END #------------------------------------------------------------------------------------------------------------------------------------------- #------------------------------------------------------------------------------------------------------------------------------------------- # 백업 로직 START #------------------------------------------------------------------------------------------------------------------------------------------- # mysqldump 백업 실행 mysqldump -u ${MYSQL_USER} -p${MYSQL_PWD} --all-databases --routines --events --single-transaction --quick > ${BACKUP_FILE} 2>> ${LOG_FILE} # 백업 성공 여부 기록 if [ $? -eq 0 ]; then echo "$(date +"%Y-%m-%d %H:%M:%S") : Backup Success" >> ${LOG_FILE} else echo "$(date +"%Y-%m-%d %H:%M:%S") : Backup Failed" >> ${LOG_FILE} fi # 7일 전 백업 파일 자동 삭제 find ${BACKUP_DIR} -type f -name "*.sql" -mtime +7 -exec rm -f {} \; #------------------------------------------------------------------------------------------------------------------------------------------- # 백업 로직 END #-------------------------------------------------------------------------------------------------------------------------------------------
# 리눅스 스케줄러 등록 명령어 crontab -e위 명령어 실행 후 스케줄러 등록 화면으로 진입할 수 있으며 상황에 맞는 스케줄러를 등록하면 된다.
# 매일 새벽 2시에 스케줄러 실행 0 2 * * * /usr/local/bin/mysql_daily_backup.sh스케줄러가 정상적으로 등록 되었는지 확인이 필요할 때는 아래 명령어를 통해 확인한다.
crontab -l
리눅스 crontab 스케줄러가 정상적으로 실행될 경우 로그 파일(/backup/mysql/log/backup.log)에 성공(Success) 또는 실패(Failed) 내용을 추가하여 기록된다.
문제 발생 시 해당 로그 기록을 확인하여 적절한 추가 작업을 진행하면 된다.