데이터베이스 백업


Database backup

데이터베이스는 어딘가에 물리적 파일을 저장하고 있으며 SQL 데이터베이스의 경우 SQL문으로 데이터베이스의 복원이 가능하다. 따라서 데이터베이스를 백업하기 위해서는 몇 가지 방법이 있다.

논리적 백업

mysqldump, mongodump 같은 각 데이터베이스가 지원하는 dump 명령어를 사용해서 데이터베이스를 백업할 수 있다. 이 경우 문제 발생시 해결이 가능하고 데이터 손상 가능성이 적지만 백업 / 복원 시에 시간이 많이 소요되며 당연히 시스템 리소스를 더 소모한다. 또 부동 소수점 데이터의 백업 복원시 데이터 정확성을 잃을 수 있다.

기타 옵션
-A, --all-databases: 모든 DB 덤프
-B, --databases: 특정 DB 덤프
--lock-alltables: 모든 테이블에 FLUSH TABLES WITH READ LOCK을 건다.

특정 DB, 특정 테이블만 백업도 가능하다.

# 백업
mysqldump -u username -p database > backup.sql

# 복원
mysqldump -u username -p database < backup.sql
혹은,
mysql>source backup.sql

물리적 백업

mysql의 경우 물리적 데이터가 기본값으로 /var/lib/mysql에 지정되어 있다. 이 경로에 있는 파일들을 cp 등의 시스템 명령어로 백업하면 된다. 복구할 때에는 데몬을 중지시킨 후 파일을 옮기고 데몬을 재시작해야 한다. 작업이 단순하고 속도가 빠르지만 논리 백업에 비해 백업 사이즈가 크며 문제 발생시 원인 파악과 해결이 힘들다.

시스템 백업

AWS같은 VPC환경에서는 백업의 방법이 더 다양하다. OS단에서 지원하는 스냅샷을 찍어 OS 전체를 백업할 수 있으며, 클라우드단에서 지원하는 스냅샷을 찍을 수도 있다. AWS의 RDBMS같은 서비스를 이용하면 자동으로 백업이 이루어져 편리하다.