이전 개발 사이트에 있던 백업본 입니다.
DB Data 를 NAS 에 주기적으로 백업하는 글을 정리했습니다.
이전 개발 사이트 운영 시, 라즈베리파이 서버의 SD 카드에 배드 섹터가 발생하면서, 모든 DB 데이터가 날라갔었던 아픔..이 있었습니다. 당시에도 Crontab 으로 주기적인 백업을 설정 했었으나, 제대로 된 설정을 하지 않아 DB 껍데기만 저장하고 있었고,
이번 기회에 제대로 정리하는 글을 남겨보려 합니다.
1. vsftpd 설치
2. DB 백업 및 NAS 에 백업 파일 전송
3. Crontab 등록
ftp 패키지 설치
$ sudo apt-get update
$ sudo apt-get install vsftpd
#vsftpd 가 정상 동작중인지 확인
sudo service vsftpd status
/etc/vsftpd.conf
Shell 파라미터는 DB password 관련 파라미터와, 날짜 파라미터를 세팅해 둔 후, 아래 로직으로 수행합니다.
1. DB 백업 및 백업 날짜 기록.
2. 백업 파일 권한 부여
3. 5일 지난 백업 파일 삭제
4. FTP 파일 전송
mysql_backup.sh
#!/bin/bash
DATE=`date +"%Y-%m-%d"`
PREV_2DATE=`date --date '1 days ago' +"%Y-%m-%d"`
PREV_5DATE=`date --date '5 days ago' +"%Y-%m-%d"`
FILE="/home/pi/Desktop/dbBackUp/backup_${PREV_5DATE}.sql"
# mysqldump 백업
mysqldump -upi -p'password' db_name > /home/pi/Desktop/dbBackUp/back$
echo "${DATE} backup is finised" > /home/pi/Desktop/backup.log
# 백업 파일 권한 부여
chmod 777 /home/pi/Desktop/dbBackUp/backup_${DATE}.sql
# 5일 지난 파일 삭제
if test -e "${FILE}"; then
rm ${FILE}
fi
# ftp 전송
expect -c "
set timeout 5
spawn env LANG=C /usr/bin/sftp pi@xxx.xxx.xxx.xxx
expect \"password:\"
send \"Password\n\"
expect \"sftp>\"
send \"cd /home/directory/backUpdir\n\"
expect \"sftp>\"
send \"pwd\n\"
expect \"sftp>\"
send \"lcd /home/pi/Desktop/dbBackUp\n\"
expect \"sftp\"
send \"mput *.sql\n\"
expect \"sftp>\"
send \"bye\n\"
"
* 해당 shell 을 실행 후, 정상적으로 DB 백업이 되는지 확인합니다.
리눅스 쉘에서 아래와 같이 입력합니다
*크롭탭의 경우 혹시 모를 권한 이슈를 위해 sudo 권한으로 작성합니다.
sudo crontab -e
vim 파일 형태의 편집 화면으로 들어가게 되며, 해당 명령어로 크론탭을 설정할 수 있는 장소로 들어오게 됩니다.
여기에 여러 크론잡을 입력 후 콜론(:) 입력 후에 wq 를 입력해 크론탭을 갱신시킵니다.
반대로 현재 크론탭에 어떤 내용이 들어있는지 보려면 아래처럼 입렵합니다.
sudo crontab -l
그러면 cat 명령어로 파일을 읽어들인 것 처럼 표준 출력으로 크론탭 내용이 나오게 됩니다.
마지막으로 크론탭을 삭제하려면 아래 명령어를 입력합니다.
sudo crontab -r
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
각 '*' 위치에 따라 주기를 다르게 설정할 수 있습니다. 순서대로 '분' '시간' '일' '월' '요일' 순입니다.
그리고 괄호 안의 숫자 범위 내로 별 대신 입력할 수 있습니다.
* 요일에서 0 과 7 일 '일요일' 이며 1부터 월요일, 6은 토요일 입니다.
위에서 등록한 mysql_backup.sh 을 매일 01시 에 돌리도록 등록합니다.
매분 실행 특정 시간 실행 반복 실행 범위 실행 간격 실행 응용 실행 |