운영하는 시스템에 MySql 데이터를 crone tab을 이용하여 정기적으로 백업을 받는 설정을 하기로 했다.
MySql에서 제공하는 mysqldump 를 이용하여 매일 새벽 1시에 Full Dump를 해당 날짜의 이름으로 받아서 압축 하고 1주일 이상 지난 덤프파일은 삭제 하는 방식으로 스크립트를 만들었다.
mysqldump를 사용하기 위해 root 계정으로 진행 하였다.
/usr/local/backup/mysql/backup.sh 내용
#!/bin/bash
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] start backup"
export backup_file_name="MySystem_db_backup_$(date +%Y%m%d)" echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] start backup"
#echo ${backup_file_name}
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] daily backup start dump : ${backup_file_name}"
/usr/bin/mysqldump -uDBUSERID -pDBUSERPW DBNAME > /usr/local/backup/mysql/${backup_file_name}.sql
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] daily backup compress : ${backup_file_name}.sql to ${backup_file_name}.sql.tar.gz"
/usr/bin/tar cvfpzR /usr/local/backup/mysql/${backup_file_name}.tar.gz /usr/local/backup/mysql/${backup_file_name}.sql
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] daily backup delete dump : ${backup_file_name}.sql"
/usr/bin/rm /usr/local/backup/mysql/${backup_file_name}.sql
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] end backup successfully"
※ 각 명령의 수행 시간을 로그에 남기도록 추가 하였다. echo ...
위 스트립트는 실행하면 지정한 DBNAME에 해당하는 데이터베이스를 MySystem_db_backup_YYYYMMDD.sql 파일로 dump 받고 해당 파일을 tar.gz 파일로 압축 후 sql 파일을 삭제하는 명령을 순서대로 기술 한 것이다.
MySQL 계정과 비밀번호가 적혀 있으므로 다른 계정에서는 접근 못하도록 퍼미션 변경
[root@localhost mysql]# chmod 600 backup.sh
[root@localhost mysql]# ls -al backup.sh[root@localhost mysql]# ls -al backup.sh
-rw-------. 1 root root 382 10월 11 2018 backup.sh
[root@localhost mysql]#
이제 매일 7일 지난 백업 파일을 삭제하는 스크립트를 만들어 보자
/usr/local/backup/mysql/delete_backup.sh 내용
===================================================================
#!/bin/bash
/usr/bin/find /usr/local/backup/mysql -name '*.tar.gz' -mtime +7 -exec rm {} \;
===================================================================
위 스크립트는 백업 폴더에 *.tar.gz 에 해당하는 모든 파일 중 생성된지 7일이 지난 파일을 삭제하는 명령이다.
코맨드 라인에서 개별로 실행 했을 때 잘 시행 된다면 크론텝에 등록하자.
[root@localhost mysql]#crontab -e
아래 내용을 입력하고 저장한다.
0 0 * * * /usr/local/backup/mysql/backup.sh >> /usr/local/backup/mysql/backup.log
0 1 * * * /usr/local/backup/mysql/delete_backup.sh >> /usr/local/backup/mysql/backup.log
위 내용은 매일 0시에 backup.sh 를 실행하고 STDOUT으로 출력되는 내용은 backup.log 파일에 추가
매일 1시에 최근 7일 이전에 생성된 backup 파일을 삭제하고 STDOUT으로 출력되는 내용은 backup.log 파일에 추가
크론텝에 잘 지정이 되었는지 확인
[root@localhost mysql]# crontab -l
0 0 * * * /usr/local/backup/mysql/backup.sh >> /usr/local/backup/mysql/backup.log
0 1 * * * /usr/local/backup/mysql/delete_backup.sh >> /usr/local/backup/mysql/backup.log
[root@localhost mysql]#
이후에 /usr/local/backup/mysql 폴더에
[root@localhost mysql]# ls -al
합계 6888652
drwxr-xr-x. 2 root root 4096 12월 23 01:00 .
drwxr-xr-x. 3 root root 19 9월 18 2018 ..
-rw-r--r--. 1 root root 878195635 12월 16 00:02 MYSystem_db_back_20191216.tar.gz
-rw-r--r--. 1 root root 879246960 12월 17 00:02 MYSystem_db_back_20191217.tar.gz
-rw-r--r--. 1 root root 880465270 12월 18 00:02 MYSystem_db_back_20191218.tar.gz
-rw-r--r--. 1 root root 881659467 12월 19 00:02 MYSystem_db_back_20191219.tar.gz
-rw-r--r--. 1 root root 882824252 12월 20 00:02 MYSystem_db_back_20191220.tar.gz
-rw-r--r--. 1 root root 883832714 12월 21 00:02 MYSystem_db_back_20191221.tar.gz
-rw-r--r--. 1 root root 883838930 12월 22 00:02 MYSystem_db_back_20191222.tar.gz
-rw-r--r--. 1 root root 883857070 12월 23 00:02 MYSystem_db_back_20191223.tar.gz
-rw-r--r--. 1 root root 28840 12월 23 00:00 backup.log
-rw-------. 1 root root 382 10월 11 2018 backup.sh
-rw-r--r-x. 1 root root 92 10월 11 2018 delete_backup.sh
[root@localhost mysql]#
이런 식으로 Dump파일이 압축되어 저장된다.
끝.
'UNIX-Networking' 카테고리의 다른 글
crontab 명령 중복 실행 방지 (0) | 2024.05.30 |
---|---|
Ubuntu GUI 환경 '원격 데스트톱연결'로 접속하기 (0) | 2022.11.29 |
CentOS 7 에 Tomcat 7 자동 재시작 하도록 서비스 등록 (0) | 2018.11.15 |
[CentOS 7 minimal 설치 #4] 방화벽(firewalld) 설정 하기 (0) | 2018.02.17 |
[CentOS 7 minimal 설치 #3] MySQL 5.7 설치 (3) | 2018.02.15 |