mysqldump — 논리 백업
Bash
# 단일 DB 백업
mysqldump -u root -p mydb > mydb_backup.sql
# 압축 백업 (gzip)
mysqldump -u root -p mydb | gzip > mydb_$(date +%Y%m%d).sql.gz
# 전체 DB
mysqldump -u root -p --all-databases > all_backup.sql
# 구조만 (데이터 제외)
mysqldump -u root -p --no-data mydb > schema_only.sql복원
Bash
# SQL 파일로 복원
mysql -u root -p mydb < mydb_backup.sql
# 압축 파일 복원
gunzip < mydb_backup.sql.gz | mysql -u root -p mydb
# DB가 없으면 먼저 생성
mysql -u root -p -e "CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p mydb < mydb_backup.sql자동화 스크립트
Bash
#!/bin/bash
DB_USER="backup_user"
DB_PASS="your_password"
BACKUP_DIR="/var/backups/mysql"
RETENTION_DAYS=14
mkdir -p "$BACKUP_DIR"
DATABASES=$(mysql -u"$DB_USER" -p"$DB_PASS" -e "SHOW DATABASES;" \
| grep -Ev "Database|information_schema|performance_schema|sys")
for DB in $DATABASES; do
FILENAME="${BACKUP_DIR}/${DB}_$(date +%Y%m%d_%H%M%S).sql.gz"
mysqldump -u"$DB_USER" -p"$DB_PASS" \
--single-transaction \
--routines \
--triggers \
"$DB" | gzip > "$FILENAME"
echo "Backed up: $FILENAME"
done
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
echo "Backup complete: $(date)"Bash
chmod +x /usr/local/bin/mysql-backup.sh
# 매일 새벽 3시 실행
echo "0 3 * * * root /usr/local/bin/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1" \
> /etc/cron.d/mysql-backup중요 옵션
| 옵션 | 용도 |
|---|---|
--single-transaction | InnoDB 일관성 있는 스냅샷 (잠금 없음) |
--routines | 저장 프로시저, 함수 포함 |
--triggers | 트리거 포함 |
--hex-blob | BLOB 데이터를 16진수로 (깨짐 방지) |
Point-in-Time Recovery (바이너리 로그)
SQL
-- my.cnf에서 바이너리 로그 활성화
-- log_bin = /var/log/mysql/mysql-bin.log
-- binlog_format = ROW
-- 현재 바이너리 로그 위치 확인
SHOW MASTER STATUS;Bash
# 특정 시점까지 복원
mysqlbinlog \
--start-datetime="2024-01-15 10:00:00" \
--stop-datetime="2024-01-15 11:30:00" \
/var/log/mysql/mysql-bin.000001 | mysql -u root -p mydb편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서MySQL 공식 매뉴얼 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.