[온라인저지] MySQL 데이터베이스 자동 백업 스크립트 (HUST OJ)

Seohyun-kim·2022년 11월 21일
0

Online Judge System

목록 보기
7/9
post-thumbnail

1. DB 백업 스크립트 작성

1.1 db_backup.sh (dump)

db_backup.sh

#!/bin/bash

DATE=$(date +%Y-%m-%d)
BACKUP_DIR=/home/judge/backup/mysql

if [ ! -d $BACKUP_DIR ]; then
  mkdir $BACKUP_DIR
fi

# mysql dump (비번예시 1234일때)
mysqldump -u root -p1234 --databases jol > $BACKUP_DIR/"backup_"$DATE.sql

# 14일 이상 지난 데이터는 삭제
find $BACKUP_DIR -ctime +14 -exec rm -f {} \;
  • DATE : 현재 날짜를 가져온다.

  • BACKUP_DIR : 백업할 디렉토리 위치를 설정한다.

  • 백업할 디렉토리가 없으면 새로 생성한다. (이미 만들었으면 안써도 되기는 함)

  • mysql 데이터 베이스를 dump 한다.

    mysqldump -u root -p{비밀번호} --databases {데이터베이스명} > $BACKUP_DIR/"backup_"$DATE.sql
    • 백업 디렉토리 내에 backup_오늘날짜.sql 파일로 저장된다.
  • 하루에 한 번 이 스크립트를 실행할건데, 그러면 너무 많이 쌓이니까
    일주일이 지난 데이터는 강제 삭제한다.


1.2 실행 권한 부여

~/backup$ chmod +x ./db_backup.sh


2. 스크립트 실행 반복 (스케줄링)

위 스크립트를 이제 하루에 한 번 매일 오전 6시에 딱 맞추어 백업을 하도록 한다.

2.1 crontab 편집: crontab -e

  1. crontab -e

    /backup/mysql# crontab -e
    no crontab for root - using an empty one
    
    Select an editor.  To change later, run 'select-editor'.
      1. /bin/nano        <---- easiest
      2. /usr/bin/vim.basic
      3. /usr/bin/vim.tiny
      4. /bin/ed
    
    Choose 1-4 [1]: 1

    nano 에디터가 편해서...ㅎ


  1. 파일 수정
  # Edit this file to introduce tasks to be run by cron.
  #
  # 어쩌구 저쩌구
  # For more information see the manual pages of crontab(5) and cron(8)
  #
  # m h  dom mon dow   command

  # 매일 오전 6시에 db 백업
  0 6 * * * /home/judge/backup/mysql/db_backup.sh
  • 주석으로 되어있는 파일이 뜰 거고
    우리가 실행할 파일을 적어준다.

  • crontab 스케줄링 시간 확인하는 참고 사이트 : crontab guru

  • 매일 오전 6시에 실행한다.


2.2 crontab 리스트 확인 명령어

$ crontab -l 

2.3 변경된 cron 재시작(restart)

$ service cron restart
  • 사용자 계정 고르기
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to restart 'cron.service'.
    Multiple identities can be used for authentication:
     1.  Ubuntu (ubuntu)
     2.  ,,, (appcenter)
    Choose identity to authenticate as (1-2): 2
  • 패스워드 입력하면 재시작 됨.


3. 파일 생성 확인

/home/judge/backup/mysql# ls
backup_2022-11-21.sql  db_backup.sh

잘 생성되었다!

나중에 이 파일이 필요하게 되면 import 해 주면 됨!

0개의 댓글