2013년 11월 30일 토요일

[Linux] MySQL 서버 DB별로 자동 백업하기

자료출처: KLTP 임홍섭님의 글

#!/bin/sh
server_name="db_server"
mysql_bin="/usr/local/mysql/bin"
mysqldb_root="/usr/local/mysql/data"
backupdb_root="/root/mysqldb_backup"
dir_name="$(date +%y%m%d%H%M)"
if [ ! -d $mysqldb_root ] ; then
echo "데이타베이스 위치를 입력해 주세요"
fi
if [ ! -d $backupdb_root ] ; then
echo "데이타 베이스 백업 공간을 만듭니다"
echo "mkdir -p $backupdb_root "
mkdir -p $backupdb_root
fi
if [ -d "$backupdb_root/$server_name.$dir_name" ]; then
echo "디렉토리가 존재합니다"
rm -rf "$backupdb_root/$server_name.$dir_name"
exit
else
echo "디렉토리를 생성합니다"
mkdir "$backupdb_root/$server_name.$dir_name"
fi
for db_name in $(ls $mysqldb_root)
do
if [ -d "$mysqldb_root/$db_name" ] ; then
echo "$db_name DB를 백업 중입니다"
$mysql_bin/mysqldump $db_name >> $backupdb_root/$server_name.$dir_name/$db_name.sql
fi
done
cd $backupdb_root
echo "백업된 DB를 압축합니다"
tar -cvzf "$server_name.$dir_name.tar.gz" "$server_name.$dir_name"
if [ -d "$backupdb_root/$server_name.$dir_name" ]; then
rm -rf "$backupdb_root/$server_name.$dir_name"
fi
let "i = 0"
for dname in $(ls -t $backupdb_root)
do
let " i = i + 1"
if [ $i -ge "11" ]; then
rm -f $backupdb_root/$dname
fi
done

복원 스크립트 입니다. 백업된 DB를 적당한 디렉토리에
압축을 해제하신후 복원에 필요한 DB만 두고 다 지우세요.
그리고 그 디렉토리에서 밑에 것을 실행 시키세요.
그리고 암호가 있으신 분은 소스에 유저와 패스워를
추가 하세요.
그리고 복원시 주의 하세요.

#!/bin/sh
mysql_bin="/usr/local/mysql/bin"
echo "DB 복원을 시작합니다."
for db_name in $(ls *.sql)
do
db="$(echo $db_name | cut -f1 -d".")"
echo "$db DB를 복원 중입니다"
$mysql_bin/mysqladmin creat $db
$mysql_bin/mysql $db < $db_name
done

=====

BSD에서 let문에 문제 있으신분

let "i = 0"
for dname in $(ls -t $backupdb_root)
do
let " i = i + 1"
if [ $i -ge "11" ]; then
rm -f $backupdb_root/$dname
fi
done

문제가 발생하신 분들은 위의 것을 아래처럼 변경하세요.

find $backupdb_root -name 'db_server.*' -name '*.tar.gz' -ctime +8 -exec rm {} \;

댓글 없음:

댓글 쓰기