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
- μ μ© κ³μ (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
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}"
- μ€ν¬λ¦½νΈλ₯Ό μ§μ μ€ννμ¬ λ°±μ νμΌμ΄ μ μ μμ±λλμ§ νμΈ
/home/ubuntu/db-backups/backup.sh
ls -lh /home/ubuntu/db-backups
tail -n 5 /home/ubuntu/db-backups/backup.log
- λ§€μΌ μ€μ 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
-
μμΆλ λ°±μ νμΌμ ν΄μ νμ¬ .sql νμΌλ‘ 볡μ
-
λ°μ΄ν°λ² μ΄μ€μ μ£Όμ ν΄ ν μ΄λΈκ³Ό λ°μ΄ν°κ° μ μμ μΌλ‘ 볡μλλμ§ νμΈ
tar -xzf /home/ubuntu/db-backups/sqld_YYYYmmdd_HHMMSS.tar.gz -C /tmp
mysql < /tmp/sqld_YYYYmmdd_HHMMSS.sql
μ΄λ² νλ‘μ νΈμμλ μ€μ΅ μμ£Όλ‘ μλν λ°±μ μ ꡬμΆνμ§λ§, μ€μ μ΄μ νκ²½μμλ μ£ΌκΈ°, λ²€λμ¬ νΉμ±, 보μκΉμ§ μ’ ν©μ μΌλ‘ κ³ λ €ν΄μΌ νλ€.
μ΄λ₯Ό μν΄ μ°Έκ³ ν μ΄μ κ°μ΄λμ κΆμ₯ μ¬νμ λ€μκ³Ό κ°λ€.
- μ΄μ: λ§€μΌ 1ν μ 체 λ€ν + 7~30μΌ λ³΄κ΄
- νμΌλͺ
κ·μΉ:
<DB>_<YYYYmmdd_HHMMSS>.tar.gz
- μ)
sqld_20250908_090000.tar.gz
- μ)
~/.my.cnf
κΆν600
μ μ§ (λΉλ°λ²νΈ λ ΈμΆ λ°©μ§)- λ°±μ λλ ν 리 μ κ·Ό κΆν μ΅μν
- μ격/λ€μ€ 보κ΄μμ 2μ°¨ λ°±μ κΆμ₯
- μ£ΌκΈ°μ 볡μ 리νμ€λ‘ μ€μ 볡ꡬ κ°λ₯μ± κ²μ¦
- MySQL 곡μ λ§€λ΄μΌ β Backup and Recovery
- Kakao Cloud DB λ°±μ κ°μ΄λ
- AWS RDS β Backup and Restore
- Google Cloud SQL λ°±μ λ¬Έμ
- Naver Cloud DB μλΉμ€ κ°μ΄λ
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 μ 보λ₯Ό μ μΈ
μ€λ¬΄μμ μμ μ μλΉμ€ μ΄μμ μν΄ λ°λμ κ³ λ €ν΄μΌ ν λ°±μ
체κ³μ μ€μμ±μ 체κ°νκ³ ,
μ΄ κ²½νμ λ°νμΌλ‘ μ€μ νκ²½μμλ λ°μ΄ν° μμ μ±κ³Ό μ λ’°μ±μ μ§ν€λ κ°λ°μλ‘ μ±μ₯νκ³ μ νλ€.