데이터베이스 백업의 중요성
데이터베이스 관리에서 보안 조치만큼 중요한 것이 바로 백업입니다. 예상치 못한 정전, 운영자의 실수, 소프트웨어 버그, 하드웨어 결함 또는 보안 침해 등으로 인해 데이터가 손실될 위험은 항상 존재합니다. 정기적인 백업은 이러한 사고 발생 시 데이터 손실을 최소화하고 서비스를 빠르게 정상화할 수 있는 유일한 수단입니다.
백업의 주요 유형
백업은 데이터베이스의 상태와 방식에 따라 크게 세 가지로 분류됩니다.
- Hot Backup (온라인 백업): 데이터베이스가 가동 중인 상태에서 백업을 수행합니다. 서비스 중단 없이 읽기 및 쓰기 작업이 가능하며, MySQL에서는 '온라인 백업'이라고도 합니다.
- Cold Backup (오프라인 백업): 데이터베이스 서비스를 완전히 중단한 후 데이터 파일을 복사하는 방식입니다. 데이터 일관성 확보가 쉽지만 서비스 중단이 불가피합니다.
- Warm Backup (반온라인 백업): 데이터베이스가 가동 중이지만, 백업 데이터의 일관성을 위해 읽기 작업만 허용하고 쓰기 작업은 제한하는 방식입니다.
또한 백업의 내용에 따라 다음과 같이 구분할 수 있습니다.
- 논리적 백업 (Logical Backup): SQL 문(INSERT, CREATE 등)으로 데이터를 추출하는 방식입니다.
mysqldump가 대표적이며, 텍스트 기반이라 데이터 확인이 쉽지만 복구 시간이 물리적 백업보다 오래 걸립니다. - 물리적 백업 (Physical Backup): 데이터베이스의 실제 데이터 파일(.ibd, .frm 등)을 직접 복사하는 방식입니다. 복구 속도가 매우 빠르며 대용량 데이터베이스에 적합합니다.
mysqldump를 이용한 논리적 백업
MySQL에서 가장 보편적으로 사용되는 도구는 mysqldump입니다. 이 도구는 스키마와 데이터를 SQL 문장으로 생성하여 텍스트 파일로 저장합니다.
단일 데이터베이스 백업
# 구문: mysqldump -u [사용자] -p [DB명] > [파일명].sql
mysqldump -u admin_user -p product_db > product_db_backup.sql
특정 테이블만 백업
mysqldump -u admin_user -p product_db orders inventory > essential_tables.sql
전체 데이터베이스 백업
mysqldump -u admin_user -p --all-databases > full_server_backup.sql
데이터 복구 방법
백업된 SQL 파일을 다시 데이터베이스에 밀어 넣어 데이터를 복구할 수 있습니다. mysql 클라이언트를 사용하여 터미널에서 직접 실행합니다.
# 구문: mysql -u [사용자] -p [DB명] < [파일명].sql
mysql -u admin_user -p product_db < product_db_backup.sql
MySQL 접속 후에는 source 명령어를 사용할 수도 있습니다.
mysql> USE product_db;
mysql> SOURCE /path/to/backup/product_db_backup.sql;
테이블 데이터 내보내기 및 가져오기 (SELECT ... INTO OUTFILE)
특정 테이블의 데이터만 텍스트 파일(CSV 등)로 내보낼 때는 SELECT ... INTO OUTFILE 문을 사용합니다. 이는 이기종 데이터베이스 간 데이터 이동 시 유용합니다.
SELECT * FROM sales_records
INTO OUTFILE '/var/lib/mysql-files/sales_export.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
참고: 보안 설정인 secure-file-priv 변수에 지정된 경로에서만 파일 생성이 가능할 수 있습니다. 설정을 확인하려면 SHOW VARIABLES LIKE 'secure_file_priv'; 명령어를 사용하세요.
내보낸 파일을 다시 불러올 때는 LOAD DATA INFILE 문을 사용합니다.
LOAD DATA INFILE '/var/lib/mysql-files/sales_export.csv'
INTO TABLE sales_records_copy
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
물리적 백업 및 데이터 마이그레이션
물리적 백업은 데이터 디렉토리를 통째로 복사하는 과정입니다. InnoDB 엔진을 사용하는 경우 데이터 파일뿐만 아니라 로그 파일(ib_logfile)과 공유 테이블스페이스(ibdata1) 파일도 반드시 함께 백업해야 복구가 가능합니다.
서버 간 마이그레이션 시에는 mysqldump의 출력을 파이프로 연결하여 즉시 전송하는 방법이 효율적입니다.
mysqldump -h source_host -u root -p source_db | mysql -h target_host -u root -p target_db
버전이 다른 서버 간 마이그레이션 시에는 하위 버전에서 상위 버전으로 가는 것은 비교적 호환성이 좋으나, 상위 버전에서 하위 버전으로 데이터를 옮길 때는 새로운 예약어나 엔진 기능의 차이로 인해 mysqldump를 통한 논리적 백업 방식을 권장합니다.