티스토리 뷰

운영하면서 반드시 필요한 것 중 하나가 데이터 백업이다.

아래는 백업을 위한 쉘 스크립트이다.

 

참고로 대량의 데이터를 다룬다면 이런 방식 말고 스토리지 백업 솔루션들을 써야한다.

이거는 가볍게 백업하기 위한..

 

FOO 라는 이름의 DB를 백업한다고 해보자.

 

SQL 파일 생성

select_table.sql

select table_name
from information_schema.tables
where 1=1
and table_schema='FOO'

 

쉘 스크립트

db_backup.sh

  1 #!/bin/bash
  2 BACKUP_PATH=/backup
  3 CURR_TIME=$(date +"%Y%m%d")
  4 FULL_PATH=${BACKUP_PATH}/${CURR_TIME}
  5 FILE_NAME=tables_${CURR_TIME}.list
  6
  7 source /etc/profile
  8
  9 mkdir -p ${FULL_PATH}
 10 mysql -u root FOO < ${BACKUP_PATH}/select_table.sql > ${FULL_PATH}/${FILE_NAME}
 11 sed -i 1d  ${FULL_PATH}/${FILE_NAME}
 12 for table in `cat ${FULL_PATH}/${FILE_NAME}`;do
 13         mysqldump -u root FOO $table > ${FULL_PATH}/${table}_${CURR_TIME}.sql
 14 done
 15
 16 cd ${BACKUP_PATH}
 17 tar -zcvf ${CURR_TIME}.tar.gz ${CURR_TIME}
 18 rm -rf ${BACKUP_PATH}/${CURR_TIME}
 19
 20 #mysqldump -u root --no-create-info FOO > foo_data_${CURR_TIME}.sql

 

해당일에 테이블별 백업을 하기 위한 쉘 스크립트이다.  

 

Line 7 에서 프로파일을 적용하는 이유는 해당 프로파일에 mysql 명령어를 위한 PATH가 잡혀 있는데 크론탭으로 돌릴 경우 PATH가 안잡히는 경우가 생겨서이다.

 

Line 10 에서 FOO DB에서 위에 만들어놓은 select_table.sql 파일을 수행하여 백업할 테이블명들을 조회한다.

이렇게 하는 이유는 테이블이 추가/삭제가 될 경우가 있어 따로 관리하기 힘드므로 카탈로그 테이블에서 조회하는게 가장 정확하다.

 

Line 11 은 위 SQL로 테이블명을 가져오면 OUTPUT에 컬럼명이 추가되는데 이걸 지워주기 위함.

 

Line 12 부터 Line 14 까지가 실제 dump를 받는 명령어인데 위 SQL로 가져온 테이블명이 담긴 파일을 읽어와서 테이블별로 백업을 하는 방식이다.

 

Line 17 로 압축을 진행

 

Line 20 은 전체 백업을 받고 싶을 때 사용하면 된다.

 

크론탭 설정

crontab -e  명령으로 편집

 

평일만 매일 22시에 백업을 수행.

 

# DB Backup
0 22 * * 1,2,3,4,5 /backup/db_backup.sh >> /backup/backup.log 2>&1

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함