다음은 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일 후 이전 백업이 자동 삭제되는지도 점검한다.