Ubuntu 환경에서 NFS 기반 MySQL 원격 자동 백업 구성

다음은 Ubuntu 기반 서버 두 대 간에 NFS(Network File System)를 활용해 MySQL 데이터베이스를 자동으로 원격 백업하는 방법이다. 예시 환경은 다음과 같다:

  • 192.168.13.163: 백업 저장용 NFS 서버
  • 192.168.13.165: MySQL 8이 실행 중인 클라이언트 서버

서버 정보 확인

각 서버에서 다음 명령어로 커널 및 배포판 정보를 확인한다.

uname -r
lsb_release -a

NFS 설치

NFS 서버(163)에는 다음을 설치한다:

sudo apt update && sudo apt install nfs-kernel-server -y

클라이언트(165)에는 다음을 설치한다:

sudo apt update && sudo apt install nfs-common -y

NFS 서버 설정

백업을 저장할 디렉터리를 생성하고 권한을 부여한다:

sudo mkdir -p /shared
sudo chmod 777 /shared

/etc/exports 파일을 편집하여 공유 규칙을 추가한다:

/shared 192.168.13.0/24(rw,sync,no_subtree_check,no_root_squash)

설정 적용:

sudo exportfs -arv
sudo systemctl enable --now rpcbind nfs-server

클라이언트에서 마운트

클라이언트 서버(165)에서 마운트 지점을 생성하고 연결한다:

sudo mkdir -p /nfs_shared/backup_server
sudo mount -t nfs 192.168.13.163:/shared /nfs_shared/backup_server

마운트 상태 확인:

df -h | grep nfs

MySQL 백업 스크립트 작성

스크립트 경로: /usr/local/bin/mysql_backup.sh

#!/bin/bash

BACKUP_MOUNT="/nfs_shared/backup_server"
if ! mountpoint -q "$BACKUP_MOUNT"; then
    echo "$(date): NFS not mounted. Attempting remount..."
    sudo mount "$BACKUP_MOUNT" || exit 1
fi

DB_USER="your_db_user"
DB_PASS="your_db_password"
DB_NAME="target_database"
BACKUP_PATH="$BACKUP_MOUNT/mysql_backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
mkdir -p "$BACKUP_PATH"

mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_PATH/${DB_NAME}_${TIMESTAMP}.sql.gz"

# 7일 이상된 백업 삭제
find "$BACKUP_PATH" -name "*.gz" -mtime +7 -delete

스크립트 실행 권한 부여:

sudo chmod +x /usr/local/bin/mysql_backup.sh

cron을 통한 정기 실행 설정

루트 크론 작업 편집:

sudo crontab -e

다음 줄을 추가하여 매일 새벽 2시에 실행되도록 설정:

0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

백업 디렉터리 미리 생성:

sudo mkdir -p /nfs_shared/backup_server/mysql_backups

검증

수동으로 스크립트를 실행해 백업이 정상적으로 수행되고, 압축 파일이 생성되는지 확인한다. 또한 7일 후 이전 백업이 자동 삭제되는지도 점검한다.

태그: MySQL nfs ubuntu cron bash

10월 2일 10:00에 게시됨