인프런 커뮤니티 질문&답변

왈왈님의 프로필 이미지
왈왈

작성한 질문수

시스템엔지니어가 알려주는 리눅스 실전편 Bash Shell Script

DB 백업 스크립트 실행 오류

해결된 질문

작성

·

338

0

[스크립트 경로]

[root@cent2 backup]# pwd
/root/backup
[root@cent2 backup]#
[root@cent2 backup]# ls
db_backup.sh

 

 

[스크립트 파일 내용]

#!/bin/bash

## 변수 설정

HOST="$(/usr/bin/hostname)"
LOG="/tmp/backup.log"
PUSH="/root/monitor/telegram_example.sh"
DATE="$(/bin/date +%Y.%m.%d)"
# 백업할 디렉토리/파일 지정
BAK_LIST="/etc/my.cnf.d"
# 백업 디렉토리
BAK_PATH="/mnt/BACKUP/${HOST}"
# 백업 파일명
BAK_FILE="${BAk_PATH}/${DATE}_${HOST}.tgz"
# DB백업디렉토리
DB_BAK_PATH="/root/backup/xtrabackup_backupfiles"
# DB백업파일명
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




## --- 로그기록 시작
{
	/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}"



	# p: 퍼미션 유지 P: 절대경로 유지
	/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 "
	/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 "
	/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}"

 

[발생 에러]

[root@cent2 backup]#
[root@cent2 backup]# ./db_backup.sh
백업디렉토리가 존재합니다.
[00] 2023-10-17 13:55:08 Connecting to MySQL server host: localhost, user: not set, password: not set, port: not set, socket: not set
[00] 2023-10-17 13:55:08 Failed to connect to MySQL server: Access denied for user ''@'localhost' (using password:NO).
/usr/bin/mariabackup based on MariaDB server 10.3.35-MariaDB Linux (x86_64)
/usr/bin/mariabackup: Can't change dir to '/root/backup/xtrabackup_backupfiles/' (errno: 2 "No such file or directory")
[00] 2023-10-17 13:55:08 can't my_setwd /root/backup/xtrabackup_backupfiles/
/usr/bin/tar: /root/backup/xtrabackup_backupfiles: Cannot stat: No such file or directory
/usr/bin/tar: Exiting with failure status due to previous errors
[root@cent2 backup]#
[root@cent2 backup]#

 

 

에러가 발생하는데 어디를 수정해야할까요?

 

답변 1

0

그로스쿨님의 프로필 이미지
그로스쿨
지식공유자

안녕하세요:)

에러로그를 보니 데이터베이스에 접속할 사용자 이름이 비어있어 mariadb에 접속을 못해 생기는 문제인 것 같습니다.
다음과 같이 DB dump부분에 --user root 를 추가해주세요.

 # DB dump
 /usr/bin/mariabackup \



  --backup \


  --user root \ 
  --no-lock \
  --target-dir="${DB_BAK_PATH}"
왈왈님의 프로필 이미지
왈왈
질문자

감사합니다. 해결되었습니다. :)

왈왈님의 프로필 이미지
왈왈

작성한 질문수

질문하기