#!/bin/bash
# 설정 변수
DB_NAME="flight_data" # 데이터베이스 이름
DB_USER="root" # 사용자 이름-실습이라 귀찮아서 root 사용
DB_PASSWORD="비밀번호" # 비밀번호
BACKUP_DIR="/home/DbBackup" # 백업 저장 경로 저는 경로를 만들었습니다.
DATE=$(date +"%Y%m%d%H%M%S") # 현재 날짜 및 시간
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$DATE.sql" # 백업 파일 이름
# 백업 수행
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE
# 백업된 파일 수 계산
cd $BACKUP_DIR
BACKUP_COUNT=$(ls -1 ${DB_NAME}_*.sql 2>/dev/null | wc -l)
# 2 버전 이상인 경우 삭제되게 설정했습니다.
if [ $BACKUP_COUNT -gt 2 ]; then
# 가장 오래된 파일 삭제
ls -tp ${DB_NAME}_*.sql | grep -v '/$' | tail -n +3 | xargs -I {} rm -- {}
fi
이후 chmod 를 하여 실행권한을 줍니다.
chmod +x ~/파일명.sh # +x는 x(실행)권한을 추가한다는 의미입니다.

이제 이 백업을 자동으로 시킬 차례입니다.
sudo yum install cronie -y 를 해줍니다.

sudo systemctl restart
sudo systemctl status
해서

동작중인걸 확인후
sudo systemctl enable 해서 자동으로 켜지도록 해줍니다.
이제
crontab -e
로 정기실행을 작성해줍니다.
문제가 생겨서 취소선 처리입니디.
아래로 내려가 주세요.
저는 매일 오전 2시에 /home/DbBackup/db_backup.sh 스크립트를 실행하도록 설정하는 예시를 작성했습니다.
0 2 * * * /home/DbBackup/db_backup.sh > /home/DbBackup/backup.log 2>&1
각 부분의 의미로는
0 2 * * *: 이 부분은 작업이 언제 실행될지를 설정하며, 분 시간 순서입니다. 저기서는 2시 0분입니다.(24시간제)
* * *는 일, 월, 요일에 대한 와일드카드로, 모든 일수 및 월수에서 실행시킵니다.
/home/DbBackup/db_backup.sh: 실행할 스크립트의 경로로 본인의 경로를 적어주세요
> /home/DbBackup/backup.log 2>&1: 출력 로그를 /home/DbBackup/backup.log 파일에 저장하고, 오류까지 같이 적게 합니다.
확인을 위해 기다릴순 없으니까 가까운 시간을 적어봅니다.
현재 작성시간은 오후 3시 27분이라서 30분에 동작하게 했습니다.

덮어씌우기가 돼버렸습니다.

DB 나온거를 위한 경로를 추가하고 다시해봅시다.

forDB 반영.

여기 경로에 forDB아까 만든 디렉토리를 수정,반영했습니다.
시간도 작성시간 기준 5분뒤입니다.
여기서 원인을 알았습니다.
생각해보니 저는 Docker로 mysql을 돌리고있었습니다...
Docker에 맞는 명령어를 사용해줍시다.
docker ps
로 원하는 컨테이너명을 확인합니다.
저는 지정안하고 켜서 mysql-container 로 나옵니다.
docker exec CONTAINER_NAME sh -c 'exec mysqldump -u username -p "password" database_name' > backup.sql
저는
sudo docker exec mysql-container sh -c 'exec mysqldump -u root -p"~~~~~" --all-databases' > /home/DbBackup/forDB/backup.sql 을써서 모든 데이터를 뽑았습니다.
crontab을 위한 sh 파일에도 docker-continer를 적어줍니다.
# 설정 변수
DB_NAME="your_database_name"
DB_USER="your_username"
DB_PASSWORD="your_password"
CONTAINER_NAME="your_mysql_container"
BACKUP_DIR="/path/to/backup_directory"
DATE=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$DATE.sql"
# Docker MySQL 백업 수행
docker exec $CONTAINER_NAME sh -c "exec mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME" > $BACKUP_FILE
# 백업된 파일 수 계산
cd $BACKUP_DIR
BACKUP_COUNT=$(ls -1 ${DB_NAME}_*.sql 2>/dev/null | wc -l)
# 2 버전 이상인 경우 삭제되게 설정했습니다.
if [ $BACKUP_COUNT -gt 2 ]; then
# 가장 오래된 파일 삭제
ls -tp ${DB_NAME}_*.sql | grep -v '/$' | tail -n +3 | xargs -I {} rm -- {}
fi
이떄
docker exec ~~ 명령어에서 권한 관련 문제가 생길 수 있습니다.
ls -ld 명령어로 권한 상태를 확인해줍니다.
sudo chmod 775 당신의 PATH
로 권한을 넣어줍니다.

하면 이렇게 잘 나옵니다.
cat 파일명.sql 하면 내용이 잘 보입니디.
# 함부로 하지마세요,,, 궁금해서 했다가 ctrl+c도 안먹고 꼼짝없이 기다렸습니다.
'도커-활용' 카테고리의 다른 글
| prometheus 도커에서 실행되자마자 꺼질때 (0) | 2025.03.04 |
|---|---|
| Mysql 정기적인 백업-2 (0) | 2025.02.24 |
| Docker 편하게 관리하기 (0) | 2025.02.05 |
| Docker Push (0) | 2025.02.04 |
| WEBODM-오픈드론맵 설치 (2) | 2025.01.17 |