데이터베이스를 착각해서 데이터를 한번 날리고 나서야(정말 다행히도 개발서버) 백업 설정을 잘해야겠구나를 느끼게 되었습니다.
이후 운영환경의 서버에서는 데이터베이스 생성 후 가장 먼저 백업부터 설정하게 되었는데요.
해당 포스팅은 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 자주 사용되는 명령어 정리
'Programming > MySQL' 카테고리의 다른 글
MySQL 날짜, 시간 더하고 빼기 및 타임존 변경(DATE_ADD, DATE_SUB, CONVERT_TZ) (0) | 2023.04.07 |
---|---|
(mysql, mariadb) general_log를 통한 실행된 쿼리 확인 방법 (0) | 2023.01.28 |
MySQL EXPLAIN 실행 계획을 통한 쿼리 최적화 (0) | 2022.11.12 |
MySQL JSON 데이터 타입에 활용되는 함수 정리 (0) | 2022.10.29 |
MySQL 계정 생성 및 권한 부여 방법 정리 (0) | 2022.10.27 |