Files
lcbp3.np-dms.work/scripts/backup_db.sh
2025-10-05 09:21:04 +07:00

47 lines
1.9 KiB
Bash

#!/bin/sh
# backup_db.sh — MariaDB dump จาก container → host backup dir
# ใช้ร่วมกับ dms_mariadb (ชื่อ container), และ mount /backup ไว้แล้ว
set -eu
# ---- ปรับค่าตามจริง ----
CONTAINER_NAME="dms_mariadb"
DB_NAME="dms"
DB_USER="center"
DB_PASS="Center#2025" # แนะนำเปลี่ยนไปใช้ ENV/ไฟล์ .env แล้ว source แทนการฝังรหัสผ่าน
RETENTION_DAYS="${RETENTION_DAYS:-14}"
# ------------------------
STAMP="$(date +'%Y%m%d_%H%M%S')"
OUTFILE="/backup/${DB_NAME}_backup_${STAMP}.sql.gz"
echo "[INFO] Starting dump: $OUTFILE"
# ตรวจว่า container รันอยู่?
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "[ERROR] Container ${CONTAINER_NAME} not running."
exit 1
fi
# ตรวจว่ามี /backup ใน container (map มาจาก /share/dms-data/mariadb/backup)
if ! docker exec "${CONTAINER_NAME}" sh -lc 'test -d /backup'; then
echo "[ERROR] /backup is not mounted inside container."
exit 1
fi
# ทำ dump แล้วบีบอัดภายในคอนเทนเนอร์ (ประหยัด IO/permission ง่ายสุด)
docker exec "${CONTAINER_NAME}" sh -lc "mysqldump -u\"${DB_USER}\" -p\"${DB_PASS}\" --single-transaction --routines --triggers --events \"${DB_NAME}\" | gzip > \"${OUTFILE}\""
if [ $? -eq 0 ]; then
echo "[OK] Backup complete: ${OUTFILE}"
else
echo "[ERROR] Backup failed."
exit 1
fi
# ลบไฟล์เก่าตามนโยบายเก็บรักษา (ทำจาก host ผ่าน bind mount)
HOST_BACKUP_DIR="${HOST_BACKUP_DIR:-/share/dms-data/mariadb/backup}"
find "${HOST_BACKUP_DIR}" -type f -name "${DB_NAME}_backup_*.sql.gz" -mtime +${RETENTION_DAYS} -print -delete
echo "[DONE] Cleanup older than ${RETENTION_DAYS} days finished."