[CentOS7] 리눅스 MySql 원격지 에서 또는 로컬에서 dump(덤프) 뜨기!
안녕하세요 깐지꾼지 파파 입니다.
정말 오랜만에 기술블로그를 작성하네요!
각설하고! 바로 본론으로 들어가도록 하겠습니다.
오늘은 리눅스에서 MySql DB 백업을 하기 위한 Shell 스크립트를 공유하도록 하겠습니다.
잘 짠 쉘은 아니지만.. 복붙 해서 사용할 수 있도록 신경 써서 만들었습니다!
[Shell Script]
해당 스크립트는 CenstOS 7.8 에서 작성하였습니다.
#!/bin/sh
PATH=/usr/bin:/bin
NAS="백업 경로"
DIV="구분"
TODAY=$(date +%Y-%m-%d)
YEAR=$(date "+%Y")
MONTH=$(date "+%m")
DAY=$(date "+%d")
#fixed value
LOG="mysql-script-backup-$(date +%Y-%m-%d-%H-%M).log"
sql_zip_file_name="offline-mysql-$(date +%Y-%m-%d-%H-%M).sql.gz"
db_user='데이터베이스 계정'
db_password='패스워드'
HOST='데이터베이스 위치'
TARGET_LIST="$NAS"
for TARGET in $TARGET_LIST
do
TARGET=$TARGET/$DIV/$YEAR/$MONTH
if [ ! -d $TARGET ] ;
then
sudo mkdir -p $TARGET
sleep 1;
sudo chgrp -R backup $TARGET
sleep 1;
sudo chmod -R 770 $TARGET
sleep 1;
echo "echo > create nas backup forder => $TARGET"
fi
sudo mysqldump --routines --host $HOST -u$db_user -p$db_password --all-databases --events --routines --single-transaction | sudo gzip -9 > $TARGET/$sql_zip_file_name
sleep 1;
#echo "Backing up DB to " $sql_zip_file_name >> $TARGET/$LOG
sleep 1;
sudo chgrp -R backup $TARGET
sleep 1;
sudo chmod 770 -R $TARGET
sleep 1;
echo "backup success $TARGET"
done
흐름 간략하게 설명드리겠습니다. 고정 값에 대한 설명과 중요하지 않은 부분은 생략하도록 하겠습니다.
5 ~ 10 : dump 파일이 업로드되는 위치 (백업 위치)
16 ~ 17 : DB 계정 설정, inline에 설정할 경우 Warning, 변수 처리 하였습니다.
20 ~ 53 :
* 파일을 저장할 위치 + 년 + 월 형식으로 최종 디렉터리를 생성
* 해당 위치에 티렉토리가 없으면 생성 및 그륩 접근 권한 backup 그륩(해당 그룹은 backup 전용 계정을 만들어서 생긴 그륩입니다.)
* mysqldump 명령어를 이용하여 전체 데이터베이스 백업(부분 백업이 필요한 경우 아래 명령어를 이용하세요)
* sudo mysqldump --routines --host $HOST -u$db_user -p$db_password --databases [지정 데이터베이스] --routines --single-transaction | sudo gzip -9 > $TARGET/$sql_zip_file_name
* 백업 완료 후 해당 경로에 생긴 파일에 대한 접근 권한을 지정합니다. chgrp, chmod 명령어 사용
* 백업 실패에 대한 처리는 하지 않았습니다. (실패하여 dump 파일을 생성하지 못했다면 뒤에 명령어는 의미 없기 때문입니다.)
해당 스크립은 본인 환경에 맞게 변형하여 사용하지면 되겠습니다.
감사합니다.!