메뉴 건너뛰기

imitator

xe 백업 및 mysql DB 백업 스크립트

2015.09.09 12:19

관리자 조회 수:106

공부도 하고 실제 쓰는 서버에 적용시킬겸 만들어봤다.

실험한 서버는 CentOS 6.6

이 스크립트를 이용하기전에 간단하게 몇개 설명만 적어놓는다.

이 연습글은 마음 내키면 수정합니다.



1. xe라고 지정한 녀석의 경우 내가 운영하고 있는 xe 디렉토리를 지정했다.

   쓸사람은 없겠지만 만약 쓴다면 실제 사용하는 xe 디렉토리의 위치를 확인하고 변경한뒤 사용하는게 좋을것같다.


2. xeback에 지정된 디렉토리 xe_backup의 경우 백엽될 디렉토리다. 경로를 바꾸고싶다면 바꿔도 상관없다.

   다만 몇개정도 mkdir로 디렉토리를 만들어줘야한다. 안만들고 스크립트쓰면 아마 백업 안될지도? 모른다.


# mkdir /usr/local/src/xe_backup

# mkdir /usr/local/src/xe_backup/xe  - xe 디렉토리가 tar.gz로 되어 저장됨

# mkdir /usr/local/src/xe_backup/DB - DB가 sql파일로 저장됨


3. hdduse는 실제 사용하고 있는 용량을 뜻한다. 이부분은 먼저 서버에 적용 되는지부터 실험하자.

   가상서버를 사용할 경우 sda가 아닌 vda로 되어있는 경우가 있기 때문이다.

   그냥 별생각없이 될라나? 식으로 실험해봤는데 되서 기쁘긴했다.

   이걸 적용한건 평소에 질리게 보는 어느 서버의 하드디스크 사용량 100%의 악몽때문일지도 모른다.


 # df -Th |grep sda1 |awk '{print $6}' |sed s/%//


대강 설명

- df -Th : 용량 출력

- grep sda1 : sda1가 있는 줄을 출력

- |awk '{print $6}'  : awk는 몇번 단락 같은 걸로 출력할수있다. 내가 출력한건 6번째 단락이다. 이걸로 내가 어느 정도까지

                               사용하는지 확인할수 있지만 %가 딸려나온다. if문에서 %를 써도 잘 될것같은데 실험은 안해봤다.

- sed s/%// : %를 공백으로 바꾼다.


4. mysqldump를 스크립트 파일에서 써먹으려면 이걸 알고있어야 되는것같다.

   현재 아이디와 비밀번호에 ' ' 가 사용된게 보인다.

   처음에 아무생각없이 이렇게 했다가 에러만 나왔다.

# mysqldump -uroot -p비밀번호 -A > ${xeback}/DB/${sysdate}_root_backup.sql

  왜 안될까 생각하다가 ' '를 사용해서 적용된걸 깨닫고 ' '의 중요함을 몸으로 깨달은 아주 소중한 날이다.

# mysqldump -u'root' -p'비밀번호' -A > ${xeback}/DB/${sysdate}_root_backup.sql


5. 백업 기록 남기기의 경우 깔끔하지 않고 더러워 보인다. 스크립트를 따로 분리 시켜 깔끔하게 보이는것도 좋을것같지만

   스크립트 파일 두개가 생기는게 더 귀찮아서 저렇게 해뒀다. 가끔씩 백업이 잘되고있나 보는것을 추천한다.

# vi /var/log/backup.log


6. vi /etc/crontab 등록

작동할 시간과 날짜를 정한다. 저렇게 등록시키면 아마 매주 월요일 새벽 1시 10분에 돌아갈거다. 

10 1 * * 1 root sh /usr/local/src/xe_backup.sh


 #!/bin/sh
xe="/home/xe/xe"
xeback="/usr/local/src/xe_backup"
sysdate=`date +%Y-%m-%d`
START=`date +%Y-%m-%d-%H%M`
hdduse=`df -Th |grep sda1 |awk '{print $6}' |sed s/%//`


if [ "$hdduse" -lt "80" ]
then

echo "하드디스크 사용량 80% 이하 확인 백업 시작"


# XE 디렉토리 백업
tar cvfz ${xeback}/xe/${sysdate}_xe.tar.gz ${xe}


# DB 백업

mysqldump -u'root' -p'passwd1' -A > ${xeback}/DB/${sysdate}_root_backup.sql

mysqldump -u'xeuser' -p'passwd2' -A > ${xeback}/DB/${sysdate}_xeuser_backup.sql


# 백업 기록 남기기

echo "" >> /var/log/backup.log
echo "=========================================================================================" >> /var/log/backup.log
echo $START >> /var/log/backup.log
echo "=========================================================================================" >> /var/log/backup.log
echo "xe 백업 및 DB 백업 완료" >> /var/log/backup.log
echo "" >> /var/log/backup.log
echo "" >> /var/log/backup.log
echo "xe 용량 확인" >> /var/log/backup.log
cd ${xeback}/xe/
du -shc * >> /var/log/backup.log
echo "" >> /var/log/backup.log
echo "DB 용량 확인" >> /var/log/backup.log
cd ${xeback}/DB/
du -shc * >> /var/log/backup.log


echo "백업 종료"


else
if [ "$hdduse" -gt "80" ]
then

echo "하드디스크 사용량이 너무 높아서 백업 불가"

fi
fi