PPWs DevOps

MariaDB - MariaDB 백업 스크립트 (Systemd.timer)

라우리 2024. 8. 24. 12:13
  •  MariaDB 전체 데이터베이스 백업 스크립트
  •  systemd.timer 사용
  •  실행환경
  •  OS : Rockey Linux 9.3
  •  DB : 10.11.9-MariaDB

1. root 폴더내 db-backup.sh 작성

sudo vi /root/db-backup.sh
#!/bin/bash

# MariaDB 용 DB Backup Shellscript

# 날짜 형식 설정
now=$(date +"%Y%m%d")
delday=$(date --date '5 days ago' +"%Y%m%d")

# 백업 및 로그 경로 설정
backupdir="/apps/db-backup"
log="${backupdir}/logs/${now}.log"

# MariaDB 접속정보 설정
user="접속유저"
password="접속유저 패스워드"

# 백업 및 로그 디렉토리 생성
mkdir -p "${backupdir}"
mkdir -p "${backupdir}/logs"

# 5일전 백업 된 파일 삭제
echo "[$(date +"%Y-%m-%d %H:%M:%S")] delete backup sql start" >> $log
sudo find "${backupdir}" -name "db_backup_${delday}.*" -type f -exec rm -f {} \;
echo "[$(date +"%Y-%m-%d %H:%M:%S")] delete backup sql end" >> $log

# 데이터베이스 백업
echo "[$(date +"%Y-%m-%d %H:%M:%S")] database backup sql start" >> $log
mariadb-dump -u${user} -p${password} --all-databases > "${backupdir}/db_backup_${now}.sql"
if [ $? -eq 0 ]; then
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] database backup completed successfully" >> $log
    gzip "${backupdir}/db_backup_${now}.sql"
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] database backup file compressed" >> $log
else
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] database backup failed" >> $log
fi
echo "[$(date +"%Y-%m-%d %H:%M:%S")] database backup sql end" >> $log
sudo chmod 711 /root/db-backup.sh

 

1-1. SELinux 활성화시 Context 설정

sudo chcon -t bin_t /root/db-backup.sh

 

2. db-backup.timer 작성

sudo vi /etc/systemd/system/db-backup.timer
[Unit]
Description=Mariadb Backup Timer

[Timer]

# 시:분:초
# *:0:0 - 매 1시간마다 0분 0초에 실행
# *:*:0 - 매 1분마다 0초에 실행
# 4:0:0 - 매일 새벽 4시에 실행
OnCalendar=4:0:0

# Server 시작시 실행
Persistent=true

# Target Service
Unit=db-backup.service

[Install]
WantedBy=multi-user.target

 

3. db-backup.service 작성

sudo vi /etc/systemd/system/db-backup.service
[Unit]
Description=Mariadb Backup Service

[Service]
# 실행할 쉘 지정
ExecStart=/root/db-backup.sh

 

4. systemd 서비스 자동시작 설정 및 시작

sudo systemctl enable db-backup.timer
sudo systemctl start db-backup.timer

 

5. timer list 확인

sudo systemctl list-timers

db-backup.timer 등록 된 것을 확인 할 수 있다

 

6. timer service 확인

sudo systemctl status db-backup.timer

활성화 상태이고 16시간 후에 db-backup.service trigger가 예약되어 있음을 확인 할 수있다.

 

7. DB 백업 결과 확인

ll /apps/db-backup/

쉘 스크립트에서 설정한 경로이다