memo/Linux

linux 리눅스에서 mysql 자동 백업하기

slow333 2023. 1. 14. 11:38

linux 리눅스에서 mysql 자동 백업하기 cron
==========1 ============
유지보수를 하다보면 DB자동백업을 요청 받는 일이 많다.
나중에 또 찾아보지 않기 위해서 작성해놓으려 한다.
자동으로 DB 백업파일을 만들기 위한 작업이다.

DB 백업하기
$ mysqldump -uroot -p1234 디비명  > 파일명.sql
해당위치에 작성한 파일명으로 파일이 만들어 진다.

Bash shell script
백업 쉘 만들기

vi db_backup.sh
#!/bin/bash 
DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/test/
mysqldump -u root -p1234 디비명 > $BACKUP_DIR"파일명_"$DATE.sql

BACKUP_DIR에 파일이 저장될 경로를 써주어 파일명 앞에 경로를 설정해주었고
해당날짜를 파일명 끝에 적기 위해서 $(date +%Y%m%d) 로 년월일을 DATE값에 넣어서 파일명에 붙여주었다.

위에 같이 쉡파일을 만들면 /home/test/ 밑에 파일명_해당날짜.sql로 덤프를 만들겠다는 뜻이다.

작업 명령 이용 방법

* * * * * /home/test/db_backup.sh
*하나하나가 분 시간 날짜 달 요일 이다. 구분은 Space로 한다.

요일은 1부터 월요일이고 6이 토요일 이다.

$crontab -e
crontab -e 해서 수정 삭제 등록 가능하다

아래와 같이 크론식 맞춰서 적어주면

30 2 * * 6 /home/test/db_backup.sh
내용을 입력하세요.
매주 토요일 오전 2:30분에 실행한다는 뜻

cron 등록 확인

$ crontab -l
하면 정상적으로 스케쥴이 등록되어서 덤프가 떠지는 것을 확인 할 수 있다.
======================================================================


1. mysql 백업 스크립트 작성
# mkdir /backup
백업된 sql을 저장할 디렉터리를 만든다

# chmod 755 backup
755권한준다

# vi /root/backup.sh
백업 스크립트를 작성한다
---------- backup.sh ------------
#!/bin/sh

DATE=`date +"%Y%m%d"` 
PREV_DATE=`date --date '5 days ago' +"%Y%m%d"`

/usr/bin/mysqldump -u사용자id -p비번 DB명 > /backup/mysql_db_bak_${DATE}.sql

chown root.root  /backup/mysql_db_bak_${DATE}.sql
chmod 755  /backup/mysql_db_bak_${DATE}.sql
rm -Rf  /backup/mysql_db_bak_${PREV_DATE}.sql /*5일 지난거 삭제*/

------------- 또는 -----------------
#!/bin/sh

DATE=$(date +%Y%m%d)

BACKUP_DIR=/home/db_backup/

mariadb-dump -u zabbix -pzabbix zabbix > $BACKUP_DIR"zabbix-backup_"$DATE.sql

find $BACKUP_DIR -ctime +3 -exec rm -f {} \;
------------ 또는 -------------
#!/bin/sh
mysqldump -h localhost -u root -pmypassword --all-databases --routines > /backup/`date '+%a'`.sql
#now create cron script smth like this
#crontab -e
#30 07 * * * /backup/backup.sh 2>&1>> /backup/dump.log
#The above will dump the database every day at 07:30
-------------------------------------------------------------

만약, 전체 DB를 백업하려면
mysqldump -u사용자id -p비번 [DB명]  -> mysqldump -u사용자id -p비번 -e --all-databases
로 바꾸면 된다.

# chmod 100 /root/bakcup.sh
변경방지 위해 실행권한 만 갖추게함

# ./root/backup.sh

테스트로 스크립트를 한 번 실행해 보자. backup 디렉토리에 백업sql이 생성됐으면 성공.

2. CronTab에 작업 등록하기 
# crontab -e
크론 탭 작성모드로 실행

00 04 * * * /root/bakcup.sh
백업 스크립트를 매일 4시 작업으로 등록

# /etc/rc.d/init.d crond restart
크론 데몬 재실행

# crontab -l
크론탭 작업 리스트 확인