데이터베이스에 보존되어있는 데이터를 백업화일 작성,리모트서버에 전송 할 필요가 생겼다.
백업처리는 이하 와 같다.
1.cron에서 1시간간격으로 sh를 실행한다.
2.sh 에는 이하의 처리를 실행한다.
-mysqldump를 실행. [200901011230.sql] yyyymmdd hhmi 등으로 한다.
-작성화일은 압축해서 리모트서버에 scp로 전송한다.
1.shell스크립트작성
#!/bin/sh
db='hoge';
dt=`date '+%Y%m%d%H%M'`;
mysqldump -uroot $db > /root/mysql_bkp/$dt.sql;
# Remote User
USER=foo
# Remote Host
HOST=hogehoge.com
# Remote Host Backup Directory
REMOTE_BACKUP_DIR=/home/foo/mysql_bkp
# Go to the backup directory
cd /root/mysql_bkp
# Get list of the backup directory
STR=`ls`
# Convert a string to an array
foo=($STR)
# Count number of array materials
MAX=${#foo[*]}
# initialize a counter
NUM=0
# search the latest backup file and remove old files.
for tmp in ${foo[@]};do
let NUM=$NUM+1
if [ $NUM = $MAX ]; then
BKP_FILE=$tmp
# else
# if [ -f $tmp ]; then
# rm -f $tmp
# fi
fi
done
# Compress a backup file.
TAR_FILE="$BKP_FILE.tar.gz"
tar zcf $TAR_FILE $BKP_FILE
# remove a dump file
rm -f $BKP_FILE
BKP_SQL="/root/mysql_bkp/$TAR_FILE"
REMOTE_BKP_SQL="/home/$USER/mysql_bkp/$TAR_FILE"
# Transfer an backup file to the remote server
scp -B -i ~/.ssh/id_rsa $BKP_SQL $USER@$HOST:$REMOTE_BKP_SQL
2.백업용 유저 작성
리모트서버에 백업용 유저를 작성,패스워드를 설정한다.。
[root@beijing ~]# useradd backuper
[root@beijing ~]# passwd backuper
Changing password for user backuper
New UNIX password:
BAD PASSWORD: it does not contain enough DIFFERENT characters
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
3.비밀키/공개키 작성 (로컬 서버 :자료 가 있는 있는 서버)
sh에서 scp를 사용해서 자동적으로 전송하기 위해서는 패스워드 인증이 아니라 공개키인증이 필요하다.(주인장: expect 를 사용하면 대화식 sh을 작성할수 있다..패스워드인증으로 가능하다. 하지만 별로 추천하고 싶지 않다.) 공개키인증을 하기 위해 로컬서버(서버) 에서 비밀키/공개키를 작성하고,작성한 공개키를 리모트서버에 업로드한다.
공개키를 작성할때 패스프레이즈(공개키화일에 대한 패스워드)를 입력하면,결국 패스워드 인증을 하는셈이므로 ,패스워드를 넣지 않고 그냥 엔터를 친다.
[키 작성하기]
[root@beijing ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/id_rsa.
Your public key has been saved in /home/xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx abcde@abcde.net
비밀키는 「/home/foo/.ssh/id_rsa」、공개키는「/home/xxxx/.ssh/id_rsa.pub」。
작성된 공개치를 리모트서버에 업로드 한다.이때 공개키의 path 는 「2 에서 작성한 유저의 홈디렉토리 /.ssh/authorized_keys」 로 할 필요가 있다.
.ssh디렉토리가 없을경우 만든다. 。(리모트서버 의 계정)
[backuper@ ~]# mkdir .ssh
로칼서버에서 만든 공개키(id_rsa.pub)를 다운로드해서 리모트서버의 계정 .ssh 디렉토리에 업로드 한다.(간단히 말하면 copy하세요.. >.< )
authorized_keys 라는 화일이 존재하지 않을경우 d_rsa.pub화일을 rename 한다.(이름 바꿔 넣으세요. )
[backuper@ ~]# cd .ssh/
[backuper@ .ssh]# mv id_rsa.pub authorized_keys
기존의 화일이 존재할경우#1 일단 같은 디렉토리#2에 업로드 하고,다음의 명령을 실행합니다.
(#1 보통 다른곳에서도 공개키를 얻기 때문에 존재해 있기도 합니다. 참고로 서버에서 ssh로 다른 서버에 접속할때 등등 공개키를 자동 다운받아 authorized_keys에 추가 합니다.
#2 authorized_keys를 less 나 cat등으로 열어보셔도 됩니다.. vi로 무식하게 공개키 코드를 집어넣고 저장하셔도 상관 없지요.꼭 같은 디렉토리일 필요도 없습니다.. 암호코드만 어떻게든 추가하면 되는것이기에... >.< )
[backuper@ .ssh]# cat id_rsa.pub >> authorized_keys
공개키의 권한을 700으로 설정합니다.
backuper@ .ssh]# chmod 700 authorized_keys
비밀키/공개키의 설정이 잘 되었는지 로컬 서버에서 scp을 직접 입력해서 확인해 봅시다.
[root@db ~]# touch scp_test.txt
[root@db ~]# scp -B -i ~/.ssh/id_rsa scp_test.txt@192.168.2.201:/tmp/scp_text.txt
처음에는 인증확인이 요구됩니다만 신경쓰지 마시고 일단 Enter를 누르시고, 다음 내용 비슷하게 전송이 되었으면 비밀키/공개키 설정은 일단 끝입니다.
200901111800.sql 100% 1307KB
1.3MB/s 00:01
4.sh작성
1에서 작성한 sh를 정기적으로 실행위한 cron를 설정합니다.
cron에서 실행할 패스를 「/root/mysql_bkp.sh」로 일단 설명 합니다.
sh의 위치를 확인.. (공부하실때는 which , whereis 보다 find 를 사용하는것이 좋다는데 한표 .. find / -name sh )
[root@db ~]# which sh
/bin/sh
cron설정 해봅니다.
[root@db ~]# crontab -e
처음에는 cron이 실행되는가 어쩐가 보기 위해서,,2분마다 실행을 해봅니다..( 읽어봅니다 man 5 crontab ) 이하의 내용을 추가해서 넣습니다. (위에서 sh 가 어디있는지 찾아봤지요? 그 path를 넣습니다.)
0-59/2 * * * * /bin/sh /root/mysql_bkp.sh
설정후 어느정도 경과후에 cron의 로그를 보기로 합니다. (로그 볼때는 less 좋네요.. less /var/log/cron)
[root@db ~]# vi /var/log/cron
다음과 비슷한 로그가 있다면 실행은 되는겁니다...
Jan 11 05:00:01 db crond[13682]: (root) CMD (/bin/sh /root/mysql_bkp.sh)
리모트서버에 화일이 전송되었는지 확인해봅니다.
그후 cron의 설정을 1시간 간격으로 설정해봅니다.
[root@db ~]# crontab -e
0 * * * * /bin/sh /root/mysql_bkp.sh
끝。
출처 : http://13friday.tistory.com/32
'IT > DBMS 공통' 카테고리의 다른 글
mysql 설치 (0) | 2013.12.24 |
---|---|
mysqld_safe (0) | 2013.12.24 |
mysql 내장 함수 (0) | 2013.12.24 |
mysql subquery limit 사용하기 (0) | 2013.12.24 |
mysql dump import/export (0) | 2013.12.24 |