운영체제 이야기/Linux(CentOS)

[CentOS7] 리눅스 MySql 원격지 에서 또는 로컬에서 dump(덤프) 뜨기!

한희성 2023. 3. 4.
반응형

안녕하세요 깐지꾼지 파파 입니다.

 

정말 오랜만에 기술블로그를 작성하네요!

 

각설하고! 바로 본론으로 들어가도록 하겠습니다.

 

오늘은 리눅스에서 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 파일을 생성하지 못했다면 뒤에 명령어는 의미 없기 때문입니다.)

 

해당 스크립은 본인 환경에 맞게 변형하여 사용하지면 되겠습니다.

감사합니다.!

 

 

반응형

댓글

💲 추천 글