본문으로 바로가기

매달 동일 작업을 반복해야하고, MyISAM과 InnoDB를 섞어서 사용하는 시스템에서 다음과 같이 Type별로 쪼개어 따로따로 백업을 받아서 진행하고자 한다.

그런데 내가 뭘 짠건지는 잘 모르겠다는게 함정....

 

매달 1일날 해당 배치가 작동함

 

#!/bin/bash

# 6개월 전의 년월을 추출함

MONTH=`date -d '6 month ago' +%Y%m`

 

# 백업 받을 공간을 확인하고  없으면 InnoDB용 백업공간과 MyISAM용 백업공간을 생성

if [ ! -d /Backup/$MONTH ]
   then
 mkdir -p /Backup/$MONTH/{innodb,myisam}
   fi

# 해당 DB에서 MyISAM,InnoDB를 사용하는 테이블명을 추출하여 리스트화해서 TEXT파일로 저장

echo  "show table status;"|mysql -uuser-ppassword DBNAME |grep $MONTH|grep "MyISAM"|awk '{print $MONTH}' >  /Backup/$MONTH$MONTH.myisam
echo  "show table status;"|mysql -uuser -ppassword DBNAME |grep $MONTH|grep "InnoDB"|awk '{print $MONTH}' >  /Backup/$MONTH/$MONTH.innodb

 

#MyISAM  테이블을 테이블 별로 tar로 묶은 후 xz로 압축처리
while read line1
do
    tar cvf /Backup/$MONTH/myisam/$line1.tar /MySQL/DATA/DBNAME/$line1.MYD /MySQL/DATA/DBNAME/$line1.MYI /MySQL/DATA/DBNAME/$line1.frm
    xz /Backup/$MONTH/{myisam/$line1.tar

# 백업 완료된 테이블은 삭제 처리
    echo "drop table $line1;"|mysql -uuser-ppassword DBNAME

done < /Backup/$MONTH$MONTH.myisam

# mysqldump로 InnoDB를 Table Dump를 받아서 xz으로 압축처리

while read line2

do
    mysqldump -uuser-ppassword DBNAME $line2 >/Backup/$MONTH/innodb/$line2.sql
    xz /Backup/$MONTH/innodb/$line2.sql

# 백업 완료된 테이블은 삭제 처리

    echo "drop table $line2;"|mysql -uuser-ppassword DBNAME

done </Backup/$MONTH/$MONTH.innodb


댓글을 달아 주세요