본문 바로가기
오라클 클라우드/우분투팁

Shell Script로 MySQL DB 주기적으로 백업

by xavi2019 2023. 3. 5.

우분투 로컬에 설치한 mysql db를 주기적으로 백업하고 일정일 이후에 자동으로 백업본 삭제하기

 

전체 Database를 한개의 파일로 백업

쉘 스크립트 작성 

홈디렉토리에 db_backup.sh 파일 작성

아래 예제는 /mnt/disks/sdb라는 외장 디스크에 저장하는 예제임. 여러분의 폴더에 맞게 경로를 바꾸면 됨 

#!/bin/bash

# 이 파일명: db_backup.sh

# 백업할 디렉토리 2개 생성
# 1. mkdir /mnt/disks/sdb/backup 
# 2. mkdir /mnt/disks/sdb/backup/db
cd /mnt/disks/sdb/backup 
DATE_YYYYMMDDHHMMSS=`date '+%Y%m%d%H%M%S'`

dailysql=$DATE_YYYYMMDDHHMMSS'_daily.sql'
password='[mysql root 비번]'

echo "mysql dailysql dump start.."

# 모든 데이터베이스 백업
mysqldump -uroot -p$password --all-databases > ./db/$dailysql

# 특정 데이터베이스 백업하고 싶으면 아래 주석을 풀면 됨
# mysqldump -uroot -p$password --single-transaction db이름 > ./db/$dailysql

echo 'dumpfile : '$dailysql

tar cvzf ./db/$dailysql'.tar.gz' ./db/$dailysql
rm ./db/$dailysql

echo 'compression file : './db/$dailysql'.tar.gz'
echo "mysql dailysql dump finished.."

# 10일전 백업본 삭제
find ./db -name '*' -mtime +10 -delete

실행권한 부여

chmod 777 /home/ubuntu/db_backup.sh

크론탭에 등록

15 3 * * * /home/ubuntu/db_backup.sh

 

 

데이터베이스별로 백업하는 법

#!/bin/bash

# 백업 디렉토리 생성
BACKUP_DIR=/mnt/disks/sdb/backup/db
DATE_YYYYMMDD=`date '+%Y%m%d'`
DATE_YYYYMMDDHHMMSS=`date '+%Y%m%d%H%M%S'`

password='root비번'

echo "mysql daily dump start.."

# 날짜별 폴더 생성
mkdir -p $BACKUP_DIR/$DATE_YYYYMMDD

# 사용자 데이터베이스 목록을 가져옵니다.
databases=$(mysql -uroot -p$password -s -N -e "SHOW DATABASES;" | grep -vE "(information_schema|mysql|performance_schema)")

for db in $databases; do
    filename=$DATE_YYYYMMDDHHMMSS"_$db.sql"
    echo "Dumping database: $db"
    
    # 각 데이터베이스를 별도의 파일로 백업합니다.
    mysqldump -uroot -p$password --single-transaction $db > $BACKUP_DIR/$DATE_YYYYMMDD/$filename
    
    # 압축합니다.
    tar cvzf $BACKUP_DIR/$DATE_YYYYMMDD/$filename'.tar.gz' $BACKUP_DIR/$DATE_YYYYMMDD/$filename
    rm $BACKUP_DIR/$DATE_YYYYMMDD/$filename
    
    echo "Compression file: $BACKUP_DIR/$DATE_YYYYMMDD/$filename.tar.gz"
done

echo "mysql daily dump finished.."

# 7일전 백업본 삭제
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;

댓글