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

tpcable127님의 프로필 이미지

작성한 질문수

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

2-4. 백업 쉘 스크립트(3)

db 백업 스크립트 오류 질문

작성

·

609

1

스크립트 실행시 아래와같은 오류가 발생합니다...

어떤게 추가되어야하나요?

답변 3

1

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

안녕하세요:) 추가 질문에 대해 답변드려요!


+ /usr/bin/mariabackup --backup --no-lock --target-dir=

[00] 2021-03-19 19:09:52 Connecting to MySQL server host: localhost, user: not set, password: not set, port: not set, socket: not set

[00] 2021-03-19 19:09:52 Failed to connect to MySQL server: Access denied for user ''@'localhost' (using password: NO).

이 부분을 보니 몇 가지 확인을 해봐야 할 것 같습니다. 

1. mariadb가 실행 중인 가

netstat -nltpu 를 실행하고 mysqld가 있는 지 확인 해 주세요. 

tcp6       0      0 :::3306   :::*   LISTEN      644/mysqld

위와 같은 내용이 보일겁니다. 

아마 여기부터 문제일 것 같은데요. 

2. 아무 것도 안보인다면 mariadb프로세스의 상태를 확인 해 보세요. 

systemctl status mariadb

를 실행하고 결과의 위에서부터 다섯번째 줄에 다음과같은 메세지가 보인다면 systemctl start mariadb를 해주세요.

   Active: inactive (daed)

그런데 여기서도 아무 것도 안보이거나 다음과 같은 결과가 나온다면 

Unit mariadb.service could not be found.

3. mariadb서버 설치가 되어있는 가 확인을 해야합니다.

rpm -qa | grep -i mariadb

를 실행하셔서 다음과같이 마리아디비 서버 패키지가 있는 지 확인 해보세요.

MariaDB-server-10.4.14-1.el8.x86_64

혹시 아무 결과가 없다면 다음을 실행해서 설치를 해 주세요. 

dnf -y install mariadb-server mariadb-client mariadb-backup --disablerepo=AppStream

4. 그리고 기본 설정을 해 주어야 합니다. 

mariadb 프로세스를 시작하고

systemctl start mariadb

mariadb를 시작 프로그램에 등록

systemctl enable mariadb

MariaDB 실행상태를 확인합니다. 

systemctl status mariadb 

여기서 결과의 5번째 줄이 아까와는 다르게 active상태로 보일겁니다.

   Active: active (running)

그리고 실습용 DB 임시 데이터를 준비해야합니다. 아마 vagrant script를 실행할 때 패키지 설치에 실패를 해서 그럴 확률이 높거든요. 

git clone https://github.com/t2sc0m/test_db.git ./test_db

cd test_db

mysql -uroot < employees.sql 

위 명령을 차례로 입력해주시면 테스트용 데이터입력까지 마칠 수 있을 겁니다. 

tpcable127님의 프로필 이미지
tpcable127
질문자

안녕하세요 마리아 DB는 설치되어있습니다.

제대로 실행이 안되어서 처음부터 cent1 2 3 재설치했는데 동일 증상이네요 ㅠㅜ

employees db 까지 확인 됩니다.

tpcable127님의 프로필 이미지
tpcable127
질문자

2. 프로세스도 러닝중입니다.

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

db process와 접속해서 테이블리스트까지 보였다면 이제 다음 단계를 알아봐야겠네요.

mariabackup을 실행할 때 문제가 생기는 것 같으니 수동으로 다음을 실행 해 보세요.

/usr/bin/mariabackup --backup --no-lock --target-dir=/root/SHELL/BACKUP/xtrabackup_backupfiles

여기서 쉘스크립트를 실행했을 때와 같이 이런 에러가 발생한다면 

Failed to connect to MySQL server: Access denied for user ''@'localhost' (using password: NO).

다음과 같이 유저 옵션을 추가해서 실행을 해 보세요. 

/usr/bin/mariabackup --backup --no-lock -u root --target-dir=/root/SHELL/BACKUP/xtrabackup_backupfiles

혹시 root유저 패스워드 설정을 하셨다면 -p 옵션도 추가해 주시고 실행을 하면 패스워드를 물어봅니다. 

그 때 지정한 root유저 패스워드를 입력하시면 돼요. 

이 방법으로 실행이 되었다면 쉘 스크립트를 열고 mariabackup옵션에 유저를 추가해 주시고 쉘스크립트를 실행해 보시면 될 것 같습니다. 

감사합니다. :)

0

tpcable127님의 프로필 이미지
tpcable127
질문자

[root@cent2 BACKUP]# ./db_backup.sh

++ /usr/bin/hostname

+ HOST=cent2

+ LOG=/tmp/backup.log

+ PUSH=/root/SHELL/monitor/tel_push.sh

++ /bin/date +%Y.%m.%d

+ DATE=2021.03.19

+ BAK_LIST=/etc/my.cnf.d

+ BAK_PATH=/mnt/BACKUP/cent2

+ BAK_FILE=/mnt/BACKUP/cent2/2021.03.19_cent2.tgz

+ DB_BAK_PATH=/root/SHELL/BACKUP/xtrabackup_backupfiles

+ DB_BAK_FILE=/mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz

+ /usr/bin/mount /mnt

+ /usr/bin/touch /tmp/backup.log

+ '[' -e /mnt/BACKUP/cent2 ']'

+ /bin/echo '백업 디렉토리가 있습니다.'

백업 디렉토리가 있습니다.

+ /bin/echo

+ /bin/echo '=== 백업 시작 시각 : '

+ /bin/date

+ /bin/echo

+ /usr/bin/mariabackup --backup --no-lock --target-dir=/root/SHELL/BACKUP/xtrabackup_backupfiles

[00] 2021-03-19 22:03:31 Connecting to MySQL server host: localhost, user: not set, password: not set, port: not set, socket: not set

[00] 2021-03-19 22:03:31 Failed to connect to MySQL server: Access denied for user ''@'localhost' (using password: NO).

+ /usr/bin/mariabackup --prepare --target-dir=/root/SHELL/BACKUP/xtrabackup_backupfiles

/usr/bin/mariabackup based on MariaDB server 10.3.27-MariaDB Linux (x86_64)

/usr/bin/mariabackup: Can't change dir to '/root/SHELL/BACKUP/xtrabackup_backupfiles/' (errno: 2 "No such file or directory")

[00] 2021-03-19 22:03:31 can't my_setwd /root/SHELL/BACKUP/xtrabackup_backupfiles/

+ /usr/bin/tar -czpPf /mnt/BACKUP/cent2/2021.03.19_cent2.tgz /etc/my.cnf.d

+ /usr/bin/tar -czpPf /mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz /root/SHELL/BACKUP/xtrabackup_backupfiles

/usr/bin/tar: /root/SHELL/BACKUP/xtrabackup_backupfiles: Cannot stat: No such file or directory

/usr/bin/tar: Exiting with failure status due to previous errors

++ /usr/bin/ls -al /mnt/BACKUP/cent2/2021.03.19_cent2.tgz

++ awk '{print $9}'

+ NAME=/mnt/BACKUP/cent2/2021.03.19_cent2.tgz

++ /usr/bin/ls -al /mnt/BACKUP/cent2/2021.03.19_cent2.tgz

++ awk '{print $5}'

+ SIZE=1554

+ /bin/echo '=== 백업 파일 정보: '

+ /bin/echo ' | 파일명 : /mnt/BACKUP/cent2/2021.03.19_cent2.tgz'

+ /bin/echo ' | 파일크기 : 1554Byte'

++ /usr/bin/ls -al /mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz

++ awk '{print $9}'

+ NAME=/mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz

++ /usr/bin/ls -al /mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz

++ awk '{print $5}'

+ SIZE=45

+ /bin/echo '=== DB백업 파일 정보: '

+ /bin/echo ' | 파일명 : /mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz'

+ /bin/echo ' | 파일크기 : 45Byte'

+ /bin/echo

+ /bin/echo '=== 백업 종료 시각 : '

+ /bin/date

+ /bin/echo

+ /usr/bin/umount /mnt

++ /usr/bin/cat /tmp/backup.log

+ /root/SHELL/monitor/tel_push.sh cent2 '

=== 백업 시작 시각 :

Fri Mar 19 22:03:31 UTC 2021

=== 백업 파일 정보:

 | 파일명 : /mnt/BACKUP/cent2/2021.03.19_cent2.tgz

 | 파일크기 : 1554Byte

=== DB백업 파일 정보:

 | 파일명 : /mnt/BACKUP/cent2/2021.03.19_cent2_DB.tgz

 | 파일크기 : 45Byte

=== 백업 종료 시각 :

Fri Mar 19 22:03:31 UTC 2021'

+ /usr/bin/rm -f /tmp/backup.log /root/SHELL/BACKUP/xtrabackup_backupfiles

0

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

안녕하세요 tpcalbe127님!

에러 메세지를 보니까 

디비 패키지의 설치 여부나 백업 쉘 스크립트 상단에 정의되어있어야 할 변수에 값이 제대로 들어가는 지 확인을 해봐야 할 것 같은데요. 

쉘 스크립트 가장 상단에서 디버깅모드를 켜고 쉘 스크립트를 실행한 다음에 에러메세지를 다시 보내주시면 정확히 알 수 있을 것 같아요. 

디버깅모드의 설정은 쉘스크립트 맨 위의 쉘 선언부분에 -x를 붙이시면 됩니다. 

#!/bin/bash -x