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

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

한희성 2023. 3. 4. 21:54
반응형

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

 

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

 

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

 

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

 

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

감사합니다.!

 

 

반응형