매달 동일 작업을 반복해야하고, 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