IT

Linux에서 crontab을 이용하여 MySQL 데이터베이스 정기 백업하기

번개애비 2022. 3. 24. 03:24

 

 

Windows 환경에서 MySQL 데이터베이스를 데이터베이스별로 자동으로 백업하기

필자의 회사의 개발서버는 Windows 기반이고 다수의 웹서비스를 개발하고 있는 상황이라 데이터베이스를 보다 효과적으로 백업하기 위해 별도의 배치파일을 만들어 스케줄러로 동작시키고 있다.

www.burndogfather.com

이전에 windows 환경에서의 mysql 스케줄링 백업에 대해 소개했었는데,

이번에는 리눅스에서 데이터베이스 스케줄링 백업에 대해서 소개한다.

(window 보다 훨~씬 쉬움!)

 

 

적당한 경로에 "블라블라.sh"와 같이 Bashshell 파일을 만들어준다.

아래 코드를 참고하여 사용하면 된다.

//샘플코드

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/sql_backup/
mysqldump -uroot -p'패스워드를입력' --all-databases  > $BACKUP_DIR"backup_"$DATE.sql
find $BACKUP_DIR -ctime +7 -exec rm -f {} \;



//예시코드

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/sql_backup/
mysqldump -uroot -p'1234' --all-databases  > $BACKUP_DIR"backup_"$DATE.sql
find $BACKUP_DIR -ctime +7 -exec rm -f {} \;


//데이터베이스명별로 백업 예시

#!/bin/bash
DBUSER="root"
DBPASS="1234"
DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/sql_backup
DBLIST=`mysql --user=$DBUSER --password=$DBPASS -e "SHOW DATABASES;" | tail -n+2`

for THISDB in $DBLIST
   do
   if [ $THISDB != "information_schema" ] && [ $THISDB != "performance_schema" ] && [ $THISDB != "accounts" ] ; then
      mysqldump -u$DBUSER -p$DBPASS $THISDB > $BACKUP_DIR"/"$DATE"_"$THISDB.sql
   fi
done
find $BACKUP_DIR -ctime +7 -exec rm -f {} \;

-ctime +7 이라고 되어 있는 곳에 7은 일주일치를 남기고 지우겠다는 것을 의미함으로

실제로 저장하고자 하는 날짜만큼으로 수정하면 된다.

 

 

생성한 sh 파일에 적당한 권한을 설정한다.

> chmod 777 ./sql_backup.sh

 

crontab에 스케줄을 적절한 시간에 설정한뒤, 저장한다.

저장한뒤에는 crond 서비스를 재시작하여 정상작동되도록 하면끝난다.

> crontab -e #스케줄수정

00 06 * * * /home/sql_backup.sh #매일 아침 6시에 실행한다.

> :wq #저장
> service crond restart #크론탭 서비스 재시작

 

 

그러면 요로코롬 백업이 된다!