1. MySQL 백업 유형 분류
데이터베이스 백업은 여러 기준에 따라 분류할 수 있으며, 각각의 특성과 사용 사례가 다릅니다.
운영 영향도 기준
- 핫 백업 (Hot Backup): 데이터베이스가 실행 중인 상태에서 백업을 수행합니다. 서비스 중단 없이 진행되며, InnoDB와 같은 트랜잭션 지원 엔진에서 주로 사용됩니다.
- 콜드 백업 (Cold Backup): 데이터베이스를 완전히 중지한 후에 백업 파일을 복사합니다. 가장 안전하지만 서비스 중단이 불가피합니다.
- 웜 백업 (Warm Backup): 데이터베이스가 실행 중이지만, 일관성을 위해 읽기 잠금(global read lock)을 걸고 백업합니다. MyISAM 엔진에서 흔히 사용되며, 쓰기 작업이 일시적으로 차단됩니다.
백업 파일 내용 기준
- 논리 백업 (Logical Backup): SQL 문이나 구분된 텍스트 형태로 데이터를 저장합니다.
mysqldump또는SELECT ... INTO OUTFILE명령으로 생성되며, 이식성이 뛰어나지만 복원 시간이 오래 걸릴 수 있습니다. - 물리 백업 (Physical Backup): 데이터 파일, 로그 파일 등 실제 데이터베이스 파일을 그대로 복사합니다.
mysqlhotcopy,XtraBackup등이 이에 해당하며, 복원 속도가 빠릅니다.
백업 범위 기준
- 전체 백업 (Full Backup): 선택한 데이터베이스 또는 테이블의 모든 데이터를 백업합니다.
- 증분 백업 (Incremental Backup): 마지막 전체 백업 이후 변경된 데이터만 백업합니다.
XtraBackup이 대표적입니다. - 로그 백업 (Log Backup): 바이너리 로그를 백업하여 특정 시점 복구(Point-in-Time Recovery)에 활용합니다.
2. mysqldump: 논리적 백업의 표준
mysqldump는 가장 널리 사용되는 논리 백업 도구입니다. MyISAM과 InnoDB 엔진을 지원하며, InnoDB의 경우 --single-transaction 옵션을 사용하여 트랜잭션 일관성을 유지하는 핫 백업이 가능합니다.
백업 명령 예시
전체 데이터베이스 백업
# 모든 데이터베이스를 단일 SQL 파일로 내보내기
[root@server ~]# mysqldump -uroot -pMyPassword --all-databases > full_backup.sql
[root@server ~]# mysqldump -uroot -pMyPassword -A > all_databases.sql
특정 데이터베이스 백업 (CREATE DATABASE 구문 포함)
[root@server ~]# mysqldump -uroot -pMyPassword -B my_database > my_db_with_create.sql
특정 데이터베이스의 특정 테이블만 백업
[root@server ~]# mysqldump -uroot -pMyPassword my_database users orders > users_orders.sql
테이블 구조만 백업 (데이터 제외)
[root@server ~]# mysqldump -uroot -pMyPassword --no-data my_database > schema_only.sql
데이터만 백업 (테이블 구조 제외)
[root@server ~]# mysqldump -uroot -pMyPassword --no-create-info my_database > data_only.sql
복원 명령 예시
전체 백업 파일 복원
[root@server ~]# mysql -uroot -pMyPassword < full_backup.sql
특정 데이터베이스 지정하여 복원
> USE target_database;
> SOURCE /backup/mysql.sql;
# 또는 직접 지정
[root@server ~]# mysql -uroot -pMyPassword target_database < mysql.sql
3. mysqlhotcopy: 물리적 백업의 고전
mysqlhotcopy는 Perl 스크립트로 구현된 물리 백업 도구로, 주로 MySQL 5.5 이전 버전에서 사용되었습니다. 테이블을 잠그고(lock tables), 캐시를 비운 뒤(flush tables), 물리 파일을 복사합니다. MyISAM 엔진만 지원하며, InnoDB에는 사용할 수 없습니다.
참고: MySQL 5.7 이상에서는 기본 배포에서 제외되었으며, 필요한 경우 yum install perl-DBD-MySQL 등의 명령으로 추가 설치할 수 있습니다.
백업 명령 예시
단일 데이터베이스 백업
[root@server ~]# mysqlhotcopy -u root -p MyPassword my_database /backup/dir/
여러 데이터베이스 동시 백업
[root@server ~]# mysqlhotcopy -u root -p MyPassword db1 db2 db3 /backup/dir/
특정 테이블만 백업
[root@server ~]# mysqlhotcopy -u root -p MyPassword my_database./users/ /backup/dir/
복원 절차
mysqlhotcopy로 생성된 백업은 단순히 데이터 파일의 복사본이므로, MySQL 데이터 디렉토리(일반적으로 /var/lib/mysql/)에 덮어쓰기하면 됩니다. 복원 후 파일 소유권을 mysql 사용자로 변경해야 합니다.
[root@server ~]# cp -ra /backup/dir/my_database /var/lib/mysql/
[root@server ~]# chown -R mysql:mysql /var/lib/mysql/my_database
4. mysqldump와 mysqlhotcopy 비교
| 특성 | mysqldump | mysqlhotcopy |
|---|---|---|
| 백업 방식 | 논리 백업 (SQL 텍스트) | 물리 백업 (파일 복사) |
| 지원 엔진 | MyISAM, InnoDB 등 대부분 | MyISAM 전용 |
| 실행 위치 | 원격 클라이언트에서도 실행 가능 | 데이터베이스 서버 로컬에서만 실행 |
| 속도 및 리소스 | 데이터가 많을수록 느리고 리소스 소모 큼 | 매우 빠르며 리소스 사용량이 적음 |
| 복원 방법 | SQL 파일을 MySQL이 파싱하여 실행 | 파일을 데이터 디렉토리에 직접 복사 |
| 잠금 동작 | 옵션에 따라 LOCK TABLES 실행 가능 | 자동으로 LOCK TABLES / FLUSH TABLES 수행 |