• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

/mnt/BACKUP 폴더가 생기지 않아서 문의드립니다

21.12.07 18:17 작성 조회수 140

0

안녕하세요! 강의 정말 잘 듣고 있습니다~

/mnt/BACKUP/host 파일을 못 찾아서 질문드립니다

 

db_backup.sh코드는 다음과 같습니다.

#!/bin/bash
## 변수 설정, 
## HOST =${hostname}으로 할 시 크론탭이 hostname 못 읽을 수 있어 hostname 파일이 있는 절대 경로의 path로 지정해야함

HOST="$(/usr/bin/hostname)"
LOG="/tmp/backup.log"
PUSH="/vagrant/SHELL/monitor/bot.sh"
DATE="$(/bin/date +%Y.%m.%d)" ## 년.월.일
## 백업할 db 설정 파일
BAK_LIST="/etc/my.cnf.d"
## 백업 디렉토리
BAK_PATH="/mnt/BACKUP/${HOST}"
## 백업 파일명
BAK_FILE="${BAK_PATH}/${DATE}_${HOST}.tgz"

## 디비 백업 디렉토리 --> mariadb 사용시 디폴트로 생성되는 파일
DB_BAK_PATH="/vagrant/SHELL/BACKUP/xtrabackup_backupfiles"

## 디비 백업 파일명
DB_BAK_FILE="${BAK_PATH}/${DATE}_${HOST}_DB.tgz"

## 스토리지에 마운트, 필요할 때마다 접속해서 마운트&언마운트 하기
/usr/bin/mount /mnt

## 로그 파일 생성
/usr/bin/touch "${LOG}"

## 백업 디렉토리 확인 (없으면 에러 날 수 있으니 에러 예방)
if [ -e "${BAK_PATH}" ]
then
	## 백업 디렉토리 존재
	/bin/echo "백업 디렉토리 있습니다. 문제 없음."
else
	## 백업 디렉토리 없으니 생성
	/usr/bin/mkdir -p "${BAK_PATH}"
fi

## ****** 로그 기록 시작 - 중과호 안의 내용이 LOG 파일로 저장
{	
	## 백업 시작 시각
	/bin/echo
	/bin/echo "=== 백업 시작 시각: "
	/bin/date
	/bin/echo
	
    
	## 백업✨✨✨
	## DB dump✨✨✨ <-- 추가된 부분
	/usr/bin/mariabackup \
			--backup \
			--no-lock \
			--target-dir="${DB_BAK_PATH}"
	
	## 백업할 때 변경되는 트랜잭션도 백업 해줘야해서 두 번 백업
	## DB apply logs✨✨✨ <-- 추가된 부분
	/usr/bin/mariabackup \
			--prepare \
			--target-dir="${DB_BAK_PATH}"
	
	/usr/bin/tar czpPf "${BAK_FILE}" ${BAK_LIST}
	
	## 위에서 백업한 DB 디렉토리 압축하기
	/usr/bin/tar czpPf "${DB_BAK_FILE}" ${DB_BAK_PATH}
	
	## 백업 파일 정보
	NAME="$(/usr/bin/ls -al "${BAK_FILE}" | awk '{print $9}')"
	SIZE="$(/usr/bin/ls -al "${BAK_FILE}" | awk '{print $5}')"
	/bin/echo "=== 백업 파일 정보 :"
	/bin/echo " | 파일명: ${NAME}"
	/bin/echo " | 파일크기: ${SIZE}Byte" ## ls로 출력할 때 byte로 뜸
	/bin/echo
	

	
	## DB 백업 파일 정보
	NAME="$(/usr/bin/ls -al "${DB_BAK_FILE}" | awk '{print $9}')"
	SIZE="$(/usr/bin/ls -al "${DB_BAK_FILE}" | awk '{print $5}')"
	/bin/echo "=== DB 백업 파일 정보 :"
	/bin/echo " | 파일명: ${NAME}"
	/bin/echo " | 파일크기: ${SIZE}Byte" ## ls로 출력할 때 byte로 뜸
	/bin/echo
	
	## 백업 종료 시각
	/bin/echo
	/bin/echo "=== 백업 종료 시각: "
	/bin/date
	/bin/echo

} >|"${LOG}"
## ***** 로그 기록 끝

## 스토리지에 언마운트
/usr/bin/umount /mnt

## 텔레그램으로 백업 로그를 전송
"${PUSH}" "${HOST}" "$(/usr/bin/cat "${LOG}")"

## 로그 파일 삭제
/usr/bin/rm -f "${LOG}"

 

./db_backup.sh를 실행시켰을 시 에러로그 부분입니다.

/usr/bin/tar: Cowardly refusing to create an empty archive
Try '/usr/bin/tar --help' or '/usr/bin/tar --usage' for more information.
/usr/bin/ls: cannot access '/vagrant/SHELL/BACKUP/xtrabackup_backupfiles/2021.12.04_path_DB.tgz': No such file or directory
/usr/bin/ls: cannot access '/vagrant/SHELL/BACKUP/xtrabackup_backupfiles/2021.12.04_path_DB.tgz': No such file or directory

텔레그램 봇에서 메세지는 다음과 같이 출력됩니다.

2021-12-04 00:18 [path] 
=== 백업 시작 시각: 
Sat Dec  4 00:18:28 UTC 2021

=== 백업 파일 정보 :
 | 파일명: /mnt/BACKUP/path/2021.12.04_path.tgz
 | 파일크기: 2321Byte

=== DB 백업 파일 정보 :
 | 파일명: 
 | 파일크기: Byte


=== 백업 종료 시각: 
Sat Dec  4 00:18:29 UTC 2021

 

이유는 모르겠지만 hostname이 path로 출력돼서 아래와 같이 실행했는데 없는 디렉토리라고 뜹니다...

 

텔레그램 메세지를 보니 디비 설정 파일은 압축된거 같은데

 

이유가 무엇일까요?

# ls -al /mnt/BACKUP/path/
ls: cannot access '/mnt/BACKUP/path/': No such file or directory

읽어주셔서 감사합니다!

답변 1

답변을 작성해보세요.

0

안녕하세요!!!! :) 엄청 꼼꼼히 잘 따라하고 계시네요!!!!

(이럴 때 강의 기획자와 운영자로서 쾌감...... ㅠㅠ 감사합니다!)

민구님이 밤 사이 슥슥 보시고 답변을 주셔서 아래 드릴게요!

zeze님 계속 화이팅입니다!

1. echo "${HOST}" 값이 path 라고 나오는 것인지 쉘 스크립트 안에서 확인 해 주세요. 
   그리고 쉘스크립트의 끝부분에 스토리지를 언마운트 하는 부분이 있습니다. 
   스크립트 실행 이후에 파일을 확인하려면 mount /mnt 를 실행한 후에 확인 해 주세요.
 
2. DB백업파일을 놔두는 경로와 텔레그램봇이 /vagrant 하위에 있는데 권한 등의 문제가 발생하지 않도록 백업 쉘 스크립트와 같은 권한을 가진 디렉토리 내에 두시는 것이 좋을 것 같습니다.
   에러로그에 디비백업파일에 액세스가 안된다고 나오는데 백업에 실패했을 수도 있으니 그 부분도 확인 해 보세요.