Linux [Backup.1] 매일마다 [홈디렉토리+전체 DB] 백업하기 (원격서버로 백업파일 전송)
페이지 정보
본문
서버운영시 가장 중요하게 생각해야 될 것 중에 하나가 바로 백업 입니다. 백업이란 만일의 사태에 대비하여 중요 데이터를 복사해두는 것을 말하죠.. 이때 만일의 사태는 데이터가 손상되는 사고를 의미합니다.
만약 천재지변, 정전, 전쟁, 사이버테러등의 이유로 데이터가 손상된다면 서버운영을 더 이상할 수 없을 지도 모릅니다. 그래서 백업이란게 필요합니다. 데이터를 복사해두었다가 사고가 난다면 바로 복원시켜 운영에 지장이 없도록 하는 것이 백업의 목적입니다.
1. 백업 스크립트
아래의 쉘스크립트는 home 디렉토리와 전체 DB(mysql)를 백업후 원격 백업서버로 업로드(전송)하도록 짜여져있습니다.
[root@localhost ~]# vi /home/backup.sh
# Backup script By CONORY var 0.1
# 백업설정 Backup Settings
TODAY=`date +%Y%m%d`
DELETE_DATE=`date -d "-백업보관기간(단위:일) days" +%Y%m%d`
BACKUP_DIR=/backup
LOG_DIR=/var/log/backup
# 필요한 디렉토리 생성 Create required directories
if [ ! -d ${BACKUP_DIR} ]
then
mkdir ${BACKUP_DIR}
chmod 700 ${BACKUP_DIR}
fi
if [ ! -d ${LOG_DIR} ]
then
mkdir ${LOG_DIR}
fi
# 홈 디렉토리 백업 Back up home directory
TGZ_DIR="/home"
TGZ_FILE="backup.tar.gz"
tar cfz ${BACKUP_DIR}/${TODAY}_${TGZ_FILE} ${TGZ_DIR}
# DB 계정정보 DB account information
DB_USER="root"
DB_PW="BD_Root_password"
# 전체 DB 백업 Full DB backup
SQL_FILE="DBbackup.sql"
mysqldump -u ${DB_USER} -p${DB_PW} --all-databases > ${BACKUP_DIR}/${TODAY}_${SQL_FILE}
# Backup server FTP account information
FTP_HOST="Remote_server_IP_or_Domain"
FTP_USER="FTP_id"
FTP_PW="FTP_password"
# 원격 백업서버로 백업파일 업로드 (업로드에 실패하면 재시도) Upload backup file to remote backup server (retry if upload fails)
LOG_FILE=${LOG_DIR}/${TODAY}.log
while [ ! -e $LOG_FILE ] || [ `egrep -c "226 Transfer complete" ${LOG_FILE}` -lt 2 ]
do
{
echo user $FTP_USER $FTP_PW
echo bi
echo prompt
echo lcd ${BACKUP_DIR}
echo mdelete ${DELETE_DATE}_${TGZ_FILE} ${DELETE_DATE}_${SQL_FILE}
echo mput ${TODAY}_${TGZ_FILE} ${TODAY}_${SQL_FILE}
echo bye
} | ftp -n -v $FTP_HOST > $LOG_FILE
done
# 로컬 백업파일 삭제 Local backup file delete
rm -f ${BACKUP_DIR}/${TODAY}_${TGZ_FILE} ${BACKUP_DIR}/${TODAY}_${SQL_FILE}
2. backup.sh 스크립트 파일의 퍼미션을 "700"으로 조정합니다.
[root@localhost ~]# chmod 700 /home/backup.sh
3. 매일마다 백업 실행
백업하고 싶다면 위에서 만든 backup.sh 파일을 실행하면 됩니다. 하지만 매일 같은 시간에 백업을 실행하는 것은 좀 귀찮지요.
그래서 cron ( https://www.happyjung.com/lecture/2507 )으로 정해진 시간에 매번 백업되도록 만듭니다.
[root@localhost ~]# crontab -e
30 3 * * * /home/backup.sh
crontab vi 에디터에서 스케줄(매일 오전 3시 30분에 백업)을 입력하고, 저장합니다.
4. 스케줄 재실행
[root@localhost cron]# systemctl restart crond.service
5. 등록된 자동 스케줄 확인
[root@localhost ~]# crontab -l
30 3 * * * /home/backup.sh
[root@localhost ~]#
이로써 매일 3시 30분에 자동으로 백업하게 되었습니다.
자료출처
https://www.conory.com/note_linux/42295
만약 천재지변, 정전, 전쟁, 사이버테러등의 이유로 데이터가 손상된다면 서버운영을 더 이상할 수 없을 지도 모릅니다. 그래서 백업이란게 필요합니다. 데이터를 복사해두었다가 사고가 난다면 바로 복원시켜 운영에 지장이 없도록 하는 것이 백업의 목적입니다.
1. 백업 스크립트
아래의 쉘스크립트는 home 디렉토리와 전체 DB(mysql)를 백업후 원격 백업서버로 업로드(전송)하도록 짜여져있습니다.
[root@localhost ~]# vi /home/backup.sh
# Backup script By CONORY var 0.1
# 백업설정 Backup Settings
TODAY=`date +%Y%m%d`
DELETE_DATE=`date -d "-백업보관기간(단위:일) days" +%Y%m%d`
BACKUP_DIR=/backup
LOG_DIR=/var/log/backup
# 필요한 디렉토리 생성 Create required directories
if [ ! -d ${BACKUP_DIR} ]
then
mkdir ${BACKUP_DIR}
chmod 700 ${BACKUP_DIR}
fi
if [ ! -d ${LOG_DIR} ]
then
mkdir ${LOG_DIR}
fi
# 홈 디렉토리 백업 Back up home directory
TGZ_DIR="/home"
TGZ_FILE="backup.tar.gz"
tar cfz ${BACKUP_DIR}/${TODAY}_${TGZ_FILE} ${TGZ_DIR}
# DB 계정정보 DB account information
DB_USER="root"
DB_PW="BD_Root_password"
# 전체 DB 백업 Full DB backup
SQL_FILE="DBbackup.sql"
mysqldump -u ${DB_USER} -p${DB_PW} --all-databases > ${BACKUP_DIR}/${TODAY}_${SQL_FILE}
# Backup server FTP account information
FTP_HOST="Remote_server_IP_or_Domain"
FTP_USER="FTP_id"
FTP_PW="FTP_password"
# 원격 백업서버로 백업파일 업로드 (업로드에 실패하면 재시도) Upload backup file to remote backup server (retry if upload fails)
LOG_FILE=${LOG_DIR}/${TODAY}.log
while [ ! -e $LOG_FILE ] || [ `egrep -c "226 Transfer complete" ${LOG_FILE}` -lt 2 ]
do
{
echo user $FTP_USER $FTP_PW
echo bi
echo prompt
echo lcd ${BACKUP_DIR}
echo mdelete ${DELETE_DATE}_${TGZ_FILE} ${DELETE_DATE}_${SQL_FILE}
echo mput ${TODAY}_${TGZ_FILE} ${TODAY}_${SQL_FILE}
echo bye
} | ftp -n -v $FTP_HOST > $LOG_FILE
done
# 로컬 백업파일 삭제 Local backup file delete
rm -f ${BACKUP_DIR}/${TODAY}_${TGZ_FILE} ${BACKUP_DIR}/${TODAY}_${SQL_FILE}
2. backup.sh 스크립트 파일의 퍼미션을 "700"으로 조정합니다.
[root@localhost ~]# chmod 700 /home/backup.sh
3. 매일마다 백업 실행
백업하고 싶다면 위에서 만든 backup.sh 파일을 실행하면 됩니다. 하지만 매일 같은 시간에 백업을 실행하는 것은 좀 귀찮지요.
그래서 cron ( https://www.happyjung.com/lecture/2507 )으로 정해진 시간에 매번 백업되도록 만듭니다.
[root@localhost ~]# crontab -e
30 3 * * * /home/backup.sh
crontab vi 에디터에서 스케줄(매일 오전 3시 30분에 백업)을 입력하고, 저장합니다.
4. 스케줄 재실행
[root@localhost cron]# systemctl restart crond.service
5. 등록된 자동 스케줄 확인
[root@localhost ~]# crontab -l
30 3 * * * /home/backup.sh
[root@localhost ~]#
이로써 매일 3시 30분에 자동으로 백업하게 되었습니다.
자료출처
https://www.conory.com/note_linux/42295
댓글목록
등록된 댓글이 없습니다.