상세 컨텐츠

본문 제목

[shellScript]DB,FILE 백업 스크립트 작성하기.

Linux/expert

by Computer_x86_64 2022. 2. 5. 00:45

본문

Shell Scrip DB & File backup

서버에서 가장 중요한 건 DB일 것입니다.

그래서 DB관련 작업은  항상 무섭다...

 

DB를 잘 알고 있지 않아서 그럴 수도 있지만 DB가 가장 중요한 항목이기도 하기 떄문 입니다.

 

그래서 중요한 DB는 스케줄링으로 일정 시간에 백업을 진행하는 게 좋습니다.

백업에 들어가면 풀 백업, 증분 백업 많지만 여기에서 정리할 내용은 풀 백업입니다.

 

만약 필요하신 분들은 다운 받아 알맞게 수정해서 사용하시면 될 것 같습니다.

아 그전에 전제 조건은 expect가 설치돼 있어야 합니다.

 

yum install -y expect

 

저도 지금 expect는 공부 중이라 따로 상세한 설명은 어렵지만 제가 이해한 내용 토대로 설명하겠습니다.

#!/bin/bash
#hkb 2022.02.05 write...v1
#Variable
DB_BAK="/data/db.bak/"
DB_ID="root"
DB_PW="password"
RM_ID="user1"
RM_PW="Remote_password"
RM_PATH="/home/user1"
RM_IP="1.1.1.1"
TODAY=$(date +%Y%m%d)

#자료 백업
COUNT=`ls -ahil /data/file | wc -l`

#만약 COUNT가 3개면 파일이 없어 백업하지 않고 다르면 백업을 진행합니다.
if [ $COUNT = 3 ];then
	echo "Empty Directory..."
else
	echo "exist file"
	cd /data/;
	tar zcvf ${DB_BAK}${TODAY}-file.tar.gz file/*
	echo "compress file OK!"
fi

#SQL BACKUP 후 압축하고 .sql파일은 삭제합니다.
cd ${DB_BAK};
mysqldump -u$DB_ID -p$DB_PW --databases userdb > ${TODAY}-db.sql;
tar zcvf ${TODAY}-db.tar.gz ${TODAY}-db.tar.gz;
rm -f ${TODAY}-db.sql;

#expect는 bash에서 불가능한 대화형 명령어 체계를 일부지원하는 것으로 파악된다.
#scp에 접속시 password를 묻는데 그럴때 미리 작성된 패스워드를 알아서 입력해줍니다. "\r"은 꼭 뒤에 입력해줘야한다.
expect << EOF
spawn scp -r ${DB_BAK}${TODAY}-file.tar.gz ${DB_BAK}${TODAY}-db.tar.gz ${RM_ID}@${RM_IP}:${RM_PATH}
	expect "passord:"
	send "${RM_PW}\r"
	expect eof
    #해당 경로에 이틀된 파일은 삭제시킵니다.
	find ${DB_BAK}${TODAY}-*.gz -ctime +1 -exec rm -f {} \;
EOF

spawn : 명령을 시작을 알립니다.

expect :  프로세스로 부터 특정 문자열 기다립니다.

send : 문자열을 프로세스에 전달합니다.

 

위와 같이 작성했습니다.

중요한 파일은 존재시 압축을 진행하고 DB는 무조건 dump를 받아 압축후 

백업서버에 던지게끔 작성된 것입니다.

 

expect를 사용하면 패스워드도 알알어 입력해 편리합니다.

위 소스를 받아 상황에 맞게 커스텀해서 사용하시면 됩니다.

물론 더 좋은 소스가 있다면 공유 부탁드립니다. 

 

댓글 영역