본문 바로가기
DB

[DB]개발자 필수! MySQL & Oracle 백업/복구 A to Z

by 다다면체 2025. 1. 16.
728x90
반응형

소중한 데이터를 안전하게 지키는 것은 모든 비즈니스와 개인에게 매우 중요한 과제입니다. 예기치 못한 시스템 장애, 하드웨어 고장, 심지어는 실수로 인한 데이터 삭제까지, 데이터 유실은 언제 어디서든 발생할 수 있습니다. 이러한 상황에 대비하기 위해 강력한 백업 및 복구 전략은 필수입니다. 이번 글에서는 널리 사용되는 데이터베이스 시스템인 MySQL과 Oracle의 효과적인 백업 및 복구 방법에 대해 자세히 알아보겠습니다. 마치 든든한 보험을 들어놓는 것처럼, 데이터 손실의 위험으로부터 안전하게 대비하는 방법을 함께 살펴보시죠!  🛠️


반응형

1. 논리적 백업 📝

논리적 백업은 데이터베이스의 스키마(구조)와 데이터를 SQL 문 또는 텍스트 파일 형태로 저장하는 방식입니다. 이 방식은 특정 시점의 데이터를 복원하거나, 다른 시스템으로 데이터를 이전할 때 유용합니다. 마치 책의 내용을 그대로 옮겨 적는 것과 같습니다.

MySQL의 mysqldump:

mysqldump는 MySQL에서 가장 흔하게 사용되는 논리적 백업 도구입니다.

 

 

백업 생성: 특정 데이터베이스 백업모든 데이터베이스 백업특정 테이블만 백업

mysqldump -u root -p my_database table1 table2 > tables_backup.sql
mysqldump -u root -p --all-databases > all_databases_backup.sql
mysqldump -u root -p --databases my_database > my_database_backup.sql

 

 

복구:

mysql -u root -p < my_database_backup.sql

Oracle의 Data Pump Export/Import

Oracle에서는 Data Pump를 사용하여 고성능의 논리적 백업 및 복구를 수행합니다.

백업 생성:

  • schemas: 백업할 스키마 지정
  • directory: 덤프 파일이 저장될 디렉토리 (Oracle 서버에 미리 생성되어 있어야 함)
  • dumpfile: 덤프 파일 이름
  • logfile: 로그 파일 이름
expdp system/password schemas=my_schema directory=backup_dir dumpfile=my_schema_backup.dmp logfile=my_schema_backup.log

 

 

복구:

-- 데이터 펌프 복구
impdp system/password schemas=my_schema directory=backup_dir dumpfile=my_schema_backup.dmp logfile=my_schema_restore.log

2. 물리적 백업 💾

물리적 백업은 데이터베이스의 데이터 파일, 로그 파일, 제어 파일 등 모든 물리적 구성 요소를 그대로 복사하는 방식입니다. 이 방식은 대용량 데이터베이스의 백업 및 복구에 효율적이며, 빠른 복구 시간을 제공합니다.

MySQL의 물리적 백업: Percona XtraBackup

Percona XtraBackup은 MySQL의 물리적 백업을 위한 강력한 오픈 소스 도구입니다. 온라인 백업을 지원하여 서비스 중단 없이 백업을 수행할 수 있다는 장점이 있습니다.

 

 

백업 생성:

xtrabackup --backup --target-dir=/backup/mysql

 

복구:

xtrabackup --prepare --target-dir=/backup/mysql # 복구 준비
xtrabackup --copy-back --target-dir=/backup/mysql # 데이터 파일 복사

 

 

Oracle의 RMAN (Recovery Manager):

RMAN은 Oracle 데이터베이스의 백업 및 복구를 위한 공식 도구입니다. 다양한 백업 전략과 복구 옵션을 제공하며, 안정적인 데이터 보호를 보장합니다.

 

백업 생성:

RMAN> BACKUP DATABASE PLUS ARCHIVELOG; -- 전체 데이터베이스 및 아카이브 로그 백업

 

복구:

RMAN> RESTORE DATABASE; -- 데이터베이스 복원
RMAN> RECOVER DATABASE; -- 로그를 적용하여 데이터베이스 복구

 


3. 복제 설정 🔄

복제는 데이터베이스의 데이터를 다른 서버에 실시간 또는 주기적으로 복사하여 데이터의 가용성과 내구성을 향상시키는 기술입니다. 주 서버에 장애가 발생하더라도 복제된 서버를 통해 서비스를 계속 제공할 수 있습니다. 마치 데이터를 여러 곳에 분산 저장하여 안전하게 관리하는 것과 같습니다.

MySQL의 복제 (Master-Slave):

[mysqld]
log-bin=mysql-bin # 바이너리 로그 활성화
server-id=1      # 고유한 서버 ID 설정

슬레이브 서버 설정 (my.cnf 또는 my.ini):

[mysqld]
server-id=2      # 마스터와 다른 고유한 서버 ID 설정

 

마스터 서버에서 복제 사용자 생성:

CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

슬레이브 서버에서 복제 시작:

CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='replicator', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1234;
START SLAVE;

Oracle의 Data Guard:

Oracle Data Guard는 주 데이터베이스와 하나 이상의 스탠바이 데이터베이스 간의 복제를 제공하는 고급 솔루션입니다. 다양한 보호 모드(최대 가용성, 최대 성능, 최대 보호)를 제공하여 비즈니스 요구 사항에 맞게 구성할 수 있습니다.

  • 설정 개요: 복잡한 설정 과정을 포함하므로, Oracle 공식 문서를 참고하는 것이 좋습니다. 기본적으로 주 데이터베이스에서 아카이브 로그를 스탠바이 데이터베이스로 전송하고, 스탠바이 데이터베이스에서 이 로그를 적용하는 방식으로 작동합니다.

Oracle의 Data Guard는 고급 복제 솔루션으로, 주 데이터베이스와 스탠바이 데이터베이스 간 복제를 제공합니다.

주 데이터베이스에서 로그 전송 서비스 활성화

ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='SERVICE=standby_db';

스탠바이 데이터베이스에서 로그 적용 서비스 활성화

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

4. 실습: 백업 및 복구 시뮬레이션 🛠️

MySQL: mysqldump를 이용한 백업 및 복구

-- 1. 데이터베이스 백업
mysqldump -u root -p my_database > my_database_backup.sql

-- 2. 데이터베이스 삭제
mysql -u root -p -e "DROP DATABASE my_database;"

-- 3. 백업에서 복구
mysql -u root -p < my_database_backup.sql

Oracle: RMAN을 이용한 복구

-- 1. 데이터베이스 백업
RMAN> BACKUP DATABASE;

-- 2. 데이터 파일 삭제 (시뮬레이션)
-- 데이터 파일을 일부러 삭제하거나 손상시키는 테스트를 수행합니다.

-- 3. 복구 실행
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;

5. 마무리 🌟

데이터는 현대 사회에서 매우 중요한 자산입니다. 효과적인 백업 및 복구 전략을 구축하고 정기적인 관리와 테스트를 통해 소중한 데이터를 안전하게 보호하시길 바랍니다. 이 글이 여러분의 데이터 관리에 도움이 되었기를 바랍니다. 궁금한 점이 있다면 언제든지 댓글로 문의해주세요.  😊

728x90
반응형