Skip to content

Minkyoungg0/mysql-cron-backup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 

Repository files navigation

πŸ“¦ MySQL Dump & Cron Backup

MySQL μžλ™ λ°±μ—… μ‹œμŠ€ν…œμ„ μ„€κ³„Β·κ΅¬ν˜„ν•˜μ—¬, 운영 ν™˜κ²½μ—μ„œ λ°μ΄ν„°μ˜ μ•ˆμ •μ„±κ³Ό 신뒰성을 보μž₯ν•˜λŠ” 체계λ₯Ό 직접 κ΅¬μΆ•ν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.


πŸ‘₯ νŒ€μ›

μž₯μ†‘ν•˜ λ¬Έλ―Όκ²½


🎯 λͺ©ν‘œ

  • 정기적인 백업을 μžλ™ν™”ν•˜μ—¬ 데이터 손싀에 λŒ€λΉ„ν•œλ‹€.
  • MySQL λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ€ν”„ν•˜κ³  μ••μΆ•ν•œ λ’€, cron으둜 주기적으둜 μ‹€ν–‰ν•˜μ—¬ 운영 ν™˜κ²½μ—μ„œλ„ μ•ˆμ •μ„±κ³Ό 신뒰성을 보μž₯ν•œλ‹€.

πŸ”§ κ΅¬ν˜„ λ‚΄μš©

πŸ“¦ MySQL Backup Automation
β”œβ”€β”€ πŸ—„οΈ DB μ€€λΉ„
β”‚   └── sqld # ν…Œμ΄λΈ” 및 μƒ˜ν”Œ 데이터 μž…λ ₯
β”‚       β”œβ”€β”€ EMP
β”‚       └── DEPT
β”‚
β”œβ”€β”€ πŸ“œ λ°±μ—… 슀크립트
β”‚   β”œβ”€β”€ .sql μΆ”μΆœ
β”‚   β”œβ”€β”€ tar.gz μ••μΆ•
β”‚   └── 무결성 검사 + μ‚­μ œ
β”‚
β”œβ”€β”€ ⏰ μžλ™ν™” (cron)
β”‚    └── 맀일 09:00
β”‚   
β”‚
β”œβ”€β”€ πŸ—‘οΈ 보관 μ •μ±…
β”‚   └── 14일이 μ§€λ‚œ λ°±μ—… μžλ™ μ‚­μ œ
β”‚
└── πŸ“ 둜그 관리
    β”œβ”€β”€ backup.log # λ°±μ—… 기둝
    └── cron.log # μžλ™ μ‹€ν–‰ 둜그

πŸ–₯️ ν”„λ‘œμ νŠΈ ν™˜κ²½

  • OS : Ubuntu 22.04 LTS
  • DBMS : MySQL Server 8.0.43
  • μ–Έμ–΄/도ꡬ : Bash Script, cron, mysqldump, tar
  • λ°±μ—… μ €μž₯μ†Œ : /home/ubuntu/db-backups

πŸ”„ λ°μ΄ν„°λ² μ΄μŠ€ λ°±μ—… μžλ™ν™” κ³Όμ •

1) λ°±μ—… 계정 인증

  • μ „μš© 계정(backup)을 λ§Œλ“€μ–΄ μ΅œμ†Œ κΆŒν•œλ§Œ λΆ€μ—¬
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'λΉ„λ°€λ²ˆν˜Έ';
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT, LOCK TABLES ON sqld.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
  • λΉ„λ°€λ²ˆν˜Έμ™€ μ ‘κ·Ό 섀정을 별도 관리 νŒŒμΌμ— μ €μž₯ν•΄ λ³΄μ•ˆμ„±μ„ κ°•ν™”
cat > /home/ubuntu/.my.cnf <<'EOF'
[client]
user=backup
password='λΉ„λ°€λ²ˆν˜Έ'
host=localhost
EOF
chmod 600 /home/ubuntu/.my.cnf

2) λ°±μ—… 슀크립트(shell script)


A. λ°μ΄ν„°λ² μ΄μŠ€ 전체λ₯Ό SQL 파일둜 μΆ”μΆœ

  • mysqldumpλ₯Ό ν™œμš©ν•΄ λ°μ΄ν„°λ² μ΄μŠ€ 전체λ₯Ό SQL 파일둜 μΆ”μΆœ
"${MYSQLDUMP}" \
  --no-tablespaces --single-transaction --routines --triggers --events \
  --databases "${DB_NAME}" > "${OUT_SQL}"

B. 덀프 νŒŒμΌμ„ tar.gz ν˜•μ‹μœΌλ‘œ μ••μΆ•ν•˜κ³  무결성을 확인

  • μƒμ„±λœ .sql νŒŒμΌμ„ μ••μΆ•ν•˜κ³ , tar -tzf둜 정상 μ••μΆ• μ—¬λΆ€λ₯Ό 검증
"${TAR}" -czf "${OUT_TAR}" -C "${BACKUP_ROOT}" "$(basename "${OUT_SQL}")"
"${TAR}" -tzf "${OUT_TAR}" >/dev/null

C. 였래된 백업은 μžλ™μœΌλ‘œ μ‚­μ œλ˜λ„λ‘ 보관 μ •μ±… 적용

  • find λͺ…λ ΉμœΌλ‘œ 14일 이상 된 .tar.gz νŒŒμΌμ€ μžλ™ μ‚­μ œ
"${FIND}" "${BACKUP_ROOT}" -name "${DB_NAME}_*.tar.gz" -type f -mtime +14 -delete

D. μ‹€ν–‰ κ²°κ³Ό 둜그 기둝

  • 백업이 싀행될 λ•Œλ§ˆλ‹€ νƒ€μž„μŠ€νƒ¬ν”„μ™€ λ°±μ—… 파일λͺ…을 λ‘œκ·Έμ— λ‚¨κΉλ‹ˆλ‹€.
echo "$(${DATE} -Is) OK: ${OUT_TAR}" >> "${LOG}"

3. μˆ˜λ™ ν…ŒμŠ€νŠΈ

  • 슀크립트λ₯Ό 직접 μ‹€ν–‰ν•˜μ—¬ λ°±μ—… 파일이 정상 μƒμ„±λ˜λŠ”μ§€ 확인
/home/ubuntu/db-backups/backup.sh
ls -lh /home/ubuntu/db-backups
tail -n 5 /home/ubuntu/db-backups/backup.log

4. 크둠 등둝(μžλ™ν™”)

  • 맀일 μ˜€μ „ 9μ‹œμ— μžλ™ 백업이 μˆ˜ν–‰λ˜λ„λ‘ μ„€μ •
*/5 * * * * /home/ubuntu/db-backups/backup.sh >> /home/ubuntu/db-backups/cron.log 2>&1
0 9 * * * /home/ubuntu/db-backups/backup.sh >> /home/ubuntu/db-backups/cron.log 2>&1

5. 볡원 절차

  • μ••μΆ•λœ λ°±μ—… νŒŒμΌμ„ ν•΄μ œν•˜μ—¬ .sql 파일둜 볡원

  • λ°μ΄ν„°λ² μ΄μŠ€μ— μ£Όμž…ν•΄ ν…Œμ΄λΈ”κ³Ό 데이터가 μ •μƒμ μœΌλ‘œ λ³΅μ›λ˜λŠ”μ§€ 확인

tar -xzf /home/ubuntu/db-backups/sqld_YYYYmmdd_HHMMSS.tar.gz -C /tmp
mysql < /tmp/sqld_YYYYmmdd_HHMMSS.sql

πŸ”’ 운영 ν™˜κ²½ 고렀사항

이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ‹€μŠ΅ μœ„μ£Όλ‘œ μžλ™ν™” 백업을 κ΅¬μΆ•ν–ˆμ§€λ§Œ, μ‹€μ œ 운영 ν™˜κ²½μ—μ„œλŠ” μ£ΌκΈ°, 벀더사 νŠΉμ„±, λ³΄μ•ˆκΉŒμ§€ μ’…ν•©μ μœΌλ‘œ κ³ λ €ν•΄μ•Ό ν•œλ‹€.
이λ₯Ό μœ„ν•΄ μ°Έκ³ ν•œ 운영 κ°€μ΄λ“œμ™€ ꢌμž₯ 사항은 λ‹€μŒκ³Ό κ°™λ‹€.

1️⃣ ꢌμž₯ 덀프 μ£ΌκΈ° & 파일λͺ… κ·œμΉ™

  • 운영: 맀일 1회 전체 덀프 + 7~30일 보관
  • 파일λͺ… κ·œμΉ™: <DB>_<YYYYmmdd_HHMMSS>.tar.gz
    • 예) sqld_20250908_090000.tar.gz

2️⃣ λ³΄μ•ˆ 및 운영 팁

  • ~/.my.cnf κΆŒν•œ 600 μœ μ§€ (λΉ„λ°€λ²ˆν˜Έ λ…ΈμΆœ λ°©μ§€)
  • λ°±μ—… 디렉토리 μ ‘κ·Ό κΆŒν•œ μ΅œμ†Œν™”
  • 원격/닀쀑 λ³΄κ΄€μ†Œμ— 2μ°¨ λ°±μ—… ꢌμž₯
  • 주기적 볡원 λ¦¬ν—ˆμ„€λ‘œ μ‹€μ œ 볡ꡬ κ°€λŠ₯μ„± 검증

πŸ” μ°Έκ³  λ¬Έμ„œ


πŸ› οΈ νŠΈλŸ¬λΈ” μŠˆνŒ…

mysqldump μ‹€ν–‰ μ‹œ PROCESS κΆŒν•œ 였λ₯˜
  • 증상 : mysqldump μ‹€ν–‰ μ‹œ λ‹€μŒκ³Ό 같은 μ—λŸ¬ λ°œμƒ
    ubuntu@myserver00:~$ ./db-backups/backup.sh
    mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

- 원인 : mysqldump κΈ°λ³Έ λ™μž‘μ— tablespaces κ΄€λ ¨ 메타데이터도 ν¬ν•¨λ˜λŠ”λ°, 이λ₯Ό μ‘°νšŒν•˜λ €λ©΄ PROCESS κΆŒν•œμ΄ ν•„μš”ν•¨.
- ν•΄κ²° : 운영 ν™˜κ²½μ—μ„œλŠ” PROCESS κΆŒν•œμ„ μ£ΌλŠ” 게 뢀담될 수 μžˆμœΌλ―€λ‘œ, `--no-tablespaces` μ˜΅μ…˜μ„ μΆ”κ°€ν•΄ 덀프 μ‹œ tablespaces 정보λ₯Ό μ œμ™Έ

πŸ“ 회고

μ‹€λ¬΄μ—μ„œ μ•ˆμ •μ  μ„œλΉ„μŠ€ μš΄μ˜μ„ μœ„ν•΄ λ°˜λ“œμ‹œ κ³ λ €ν•΄μ•Ό ν•  λ°±μ—… μ²΄κ³„μ˜ μ€‘μš”μ„±μ„ μ²΄κ°ν–ˆκ³ ,
이 κ²½ν—˜μ„ λ°”νƒ•μœΌλ‘œ μ‹€μ œ ν™˜κ²½μ—μ„œλ„ 데이터 μ•ˆμ •μ„±κ³Ό 신뒰성을 μ§€ν‚€λŠ” 개발자둜 μ„±μž₯ν•˜κ³ μž ν•œλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published