CRON 활용 table 백업 및 load data로 데이터 insert

김영탁

제가 며칠동안 고생하여 구현한 방법입니다. 혹시라도 필요하신 분 있을까해서 올립니다.

vi에서 아래와 같이 입력하고 /etc/cron.houtly 에 저장해 두면 매시간마다 실행됩니다.
파일 권한은 755로 해줬습니다.

==================================================================================
#!/bin/sh
dat=`date ‘+%Y%m%d%H%M’`
#
# (txt로 변환된 파일을 ftp로 올려두어 파일이 존재하면 아래 스크립트를 실행합니다.)
if [ -f /home/zerotak.com/public_html/db/db.txt ] ; then
#
# Table Name Modify(원래의 테이블을 이름을 바꾸어 그대로 둡니다.)
/usr/local/mysql/bin/mysql -uid -ppw zerotak -e “rename table goods to goods_$dat”
#
# Table Create(미리 만들어둔 테이블 생성 스크립트로 테이블을 만듭니다.)
/usr/local/mysql/bin/mysql -uid -ppw zerotak < /home/zerotak.com/public_html/db/goods.sql
#
# DB Update(새로 만든 빈 테이블에 load data 명령으로 txt파일의 데이터를 집어넣습니다.)
/usr/local/mysql/bin/mysql -uid -ppw zerotak -e “load data infile ‘/home/zerotak.com/public_html/db/db.txt’ replace into table goods fields terminated by ‘,'”
#
# File Rename(위 과정을 실행후 txt파일의 이름을 변경합니다.)
mv /home/zerotak.com/public_html/db/db.txt /home/zerotak.com/public_html/db/db_$dat.txt
#
#
fi
==================================================================================

송효진 좀 위험해 보입니다.
db.txt 의 형식이 잘못되었을경우 발견할때까지 잘못된 데이터가 들어있겠군요.

원본 테이블의 이름을 먼저 바꾸지 말고,
새 테이블을 임시 이름으로 생성하여 데이터 입력한 후,
원본 테이블의 이름을 바꾸고, 새 테이블의 이름을 바꾸면.
서비스 중단시간을 최소화 할 수 있겠군요.

임시테이블에 입력할 때 오류가 있으면 작업이 거기서 중단되도록 하면 서비스에도 지장 없겠고요.