Programming/MySQL

mysql 자동 백업 설정 방법 (ubuntu server)

Jan92 2022. 12. 1. 01:36

데이터베이스를 착각해서 데이터를 한번 날리고 나서야(정말 다행히도 개발서버) 백업 설정을 잘해야겠구나를 느끼게 되었습니다.

이후 운영환경의 서버에서는 데이터베이스 생성 후 가장 먼저 백업부터 설정하게 되었는데요.

해당 포스팅은 ubuntu 서버에서 mysql, mariadb 자동 백업을 설정 방법에 대한 내용입니다.

(백업 과정에서 mysqldump 기능이 사용되는데, 해당 기능에 대한 자세한 내용은 따로 정리한 포스팅이 있어서 맨 하단에 링크를 첨부해놓았습니다. 필요하신 경우 참고해주시면 좋을 것 같습니다.)

 

백업 방식은 크게 '백업을 수행할 스크립트 파일(.sh) 생성', '작업 스케줄러(crontab)를 통해 생성된 스크립트 파일을 스케줄링' 두 가지로 나뉘는데요. 이어지는 내용을 통해 구체적인 데이터 자동 백업 방법을 살펴보겠습니다.

 

 

 


(1. 백업을 수행할 스크립트 파일을 생성하는 부분)

 

1. 백업 파일을 저장할 폴더를 생성

# mkdir /root/db_backup

가장 먼저 백업 파일을 저장할 폴더를 생성합니다.

백업 파일을 저장할 폴더의 경우 사용자가 원하는 위치에 만들면 되지만 대부분 /root 폴더 또는 /home 폴더 아래에 생성한다고 합니다.

 

 

2. 생성된 백업 폴더의 권한을 수정

# chmod 755 /root/db_backup

생성된 백업 폴더(db_backup)의 권한을 수정합니다. 소유자는 읽기/쓰기/실행이 가능하고, 그 외에는 읽기/실행이 가능합니다.

 

 

3. 백업을 수행할 스크립트 파일 생성

# vi /root/db_backup/backup.sh

백업을 수행할 스크립트 파일 'back.sh'를 생성하여 해당 파일을 통해 명령어를 입력할 것입니다.

 

 

4. 생성된 스크립트 파일의 내용 입력

#! /bin/bash
FILE_NAME=backup_`date +"%Y%m%d%H%M%S"`
BACKUP_DIR=/root/db_backup/

mysqldump -u[USER] -p[PASSWORD] --databases [DB_NAME] > $BACKUP_DIR$FILE_NAME.sql

find $BACKUP_DIR -ctime +14 -exec rm -f {} \;

생성된 'backup.sh' 파일의 내용을 입력합니다.

FILE_NAME의 경우 날짜와 시간을 변수로 사용하여 backup_2-221120230615 같은 형식으로 지정됩니다.

또한 파일의 마지막 줄은 14일이 지난 백업 파일을 찾아서 삭제하기 위한 코드입니다.

 

* 이때 작성되는 스크립트 파일의 큰 틀은 같지만 세부적인 내용은 작성하는 사람들마다 다른데요. 때문에 다른 포스팅에서는 내용이 다를 수 있으며, 작성되는 내용에 대한 어느 정도의 이해가 있다면 필요에 맞게 수정하는 것도 가능합니다.

 

#! /bin/bash
FILE_NAME=backup_`date +"%Y%m%d%H%M%S"`
BACKUP_DIR=/root/db_backup/

mysqldump -u[USER] -p[PASSWORD] --databases [DB_NAME] > $BACKUP_DIR$FILE_NAME.sql

tar -cvzf $BACKUP_DIR${FILE_NAME}.tar.gz $BACKUP_DIR${FILE_NAME}.sql
rm -rf $BACKUP_DIR${FILE_NAME}.sql

비슷한 내용이지만 다음과 같은 방식으로 .sql 파일을 압축시키고 원본을 삭제하는 방법도 있습니다.

 

 

5. 생성된 스크립트 파일 권리 부여

# chmod 100 /root/db_backup/backup.sh

backup.sh 파일에 대해 파일 소유자만 실행 가능한 권리를 부여합니다.

 

 

 


(2. 작업 스케줄러를 통해 생성된 스크립트 파일을 스케줄링하는 부분)

 

6. 작업 스케줄러(crontab) 설정

# crontab -e

해당 명령어를 통해 작업 스케줄러 설정을 할 수 있는데요.

(설정 후 crontal -l 명령어를 통해 예약된 작업 리스트를 볼 수도 있습니다.)

 

# db_backup
# 매일 0시 0분 backup.sh 파일 실행
0 0 * * * /root/database_backup/backup.sh

# 30분 마다 실행
*/30 * * * * /root/database_backup/backup.sh

# 매주 월요일 새벽 2시에 실행
0 02 * * 1 /root/database_backup/backup.sh

# 매월 1일 새벽 1시에 실행
0 01 1 * * /root/database_backup/backup.sh

해당 내용은 작업 스케줄러 내부에서 설정하는 방식으로 몇 가지 예시를 함께 첨부하였습니다.

 

 

┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0 - 6) (0:일요일, 1:월요일, …, 6:토요일)
│ │ │ └─ 월 (1 - 12 or jan, feb, mar, apr...)
│ │ └─일 (1 - 31)
│ └─ 시 (0 - 23)
└─ 분 (0 - 59)

(crontab이란, 간단하게 Linux 운영체제에서 특정 작업을 주기로 실행하기 위해 사용되는 작업 스케줄러이며, 다음과 같이 분, 시, 일, 월, 요일 순으로 설정값을 지정할 수 있습니다.)

 

 

 

< 함께 보면 좋은 자료 >

2022.10.24 - [Programming/MySQL] - MySQL, MariaDB 데이터베이스 백업 및 복구하는 방법

2022.11.24 - [Programming/Linux] - 리눅스 파일 편집기 vi 자주 사용되는 명령어 정리