DB 백업·시점 복구·복제와 고가용성
데이터베이스 백업은 복원 가능한 일관된 데이터를 확보하는 작업입니다. 복제와 장애 전환은 백업과 다른 문제를 해결합니다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 기본 백업과 연속된 변경 로그로 시점 복구가 이루어지는 과정을 설명한다.
- 백업·복제·장애 전환이 해결하는 실패 범위를 구분한다.
- 복원 가능 범위와 검증 시간을 RPO·RTO로 확인한다.
01오류·질의·변경 로그가 남기는 사실의 차이
- 오류 로그는 시작·종료·복구·엔진 장애 등을 설명하고, general query log는 연결과 수신한 질의 등을 기록한다.
- 질의 수신과 커밋수신했다는 기록이 그 이 성공하여 commit되었다는 뜻은 아니다.
- 는 실행 시간 등 설정 조건에 맞는 질의를 남기므로 일반 질의 전체나 사용자 감사 기록과 목적이 다르다.
- ·복제는 복제와 시점 복구에 사용할 변경 스트림이다.
- 설정과 실행 변수서버의 설정 파일과 실제 적용된 변수는 다를 수 있다.
- 배포판의 기본 파일, include 순서, 시작 인자와 버전에 따라 최종 값이 정해지므로 SHOW VARIABLES로 동작 값을 볼 수 있다.
- general loggeneral log에는 입력값이나 민감한 이 담길 수 있어 공개 자료에는 익명화한 구조만 사용한다.
- 로깅의 비용·노출로그를 켠다는 것은 관찰 정보를 늘리는 동시에 저장 공간·I/O·정보 노출을 늘리는 선택이다.
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'general_log';
SHOW VARIABLES LIKE 'slow_query_log';
-- 변수 이름과 지원 여부는 MySQL/MariaDB 버전에 따라 확인한다.교육용 예시. 실제 요청·발송·설정 변경을 실행한 결과가 아니다.
연결 번호와 질의가 이어지는 General Query Log
원본 크기로 보기 ↗이 자료에서 읽어낼 것
- Connect → Query → Quit가 같은 연결 번호 8에 연결된다.
- show database와 show databases 모두 Query로 기록된다. 잘못된 SQL도 수신 기록에 나타날 수 있어 이 로그만으로 성공 여부를 단정하지 않는다.
- 오래된 날짜 형식과 제품 환경은 예시일 뿐 현재 서버의 권장 버전·설정이 아니다.
02논리 백업과 물리 백업은 복원 경로가 다르다
- 은 테이블 정의와 행 데이터를 또는 논리 형식으로 내보낸다.
- 의 이식성사람이 구조를 살펴보거나 다른 환경으로 옮기기 쉽지만 대용량에서는 내보내기와 다시 INSERT하는 시간이 길 수 있다.
- 의 호환 조건은 DB 파일·페이지를 엔진의 복구 규칙에 맞게 보관하므로 빠를 수 있지만 엔진·버전·포맷 호환성과 일관성 조건이 더 직접적으로 연결된다.
- 실행 중 파일 복사실행 중인 데이터 디렉터리를 파일 복사 도구로 단순 복사하면 각 파일을 읽은 시점이 달라질 수 있다.
- ·로그버퍼에만 있던 변경, 로그와 데이터 페이지의 순서도 맞아야 한다.
- 일관된 백업 절차제품의 일관된 절차나 DB와 협력하는 스냅샷을 사용하는 이유다.
- 백업스냅샷 자체가 애플리케이션 일관성을 자동 보증하거나 별도 장치 백업이 되는 것은 아니다.
03single-transaction 덤프와 출력 파일의 의미
- 의 와 의 는 도구다.
- --은 주로 InnoDB 같은 테이블을 일관된 스냅샷으로 읽는 데 쓰인다.
- ·백업비트랜잭션 테이블이나 백업 도중 DDL은 같은 보장을 받지 않을 수 있으므로 자료와 변경 범위를 통제한다.
- 백업할 객체 범위routines·events·triggers 같은 객체 포함 범위도 데이터 행과 별도로 선택한다.
- 백업명령이 을 표준 출력에 내보내도 파일로 저장하지 않으면 영속 백업 파일이 완성되지 않는다. 아래 예시는 보호된 실습 백업 디렉터리가 이미 있고 전용 계정에 필요한 권한이 있다는 가정이다.
- 암호 전달 방식--password 뒤에 실제 암호를 적지 않으면 대화형 입력을 사용한다.
- 복원·백업파일 권한, 성공 종료 상태, 저장 장치 보존과 복원 가능성까지 이어져야 백업 작업이 된다.
umask 077
mariadb-dump --host=db.example --user=backup --password \
--single-transaction --routines --events --triggers \
--databases study > /secure-backup/study.sql
# 교육용 경로이며 덤프 중 DDL·비트랜잭션 테이블 조건은 별도 통제한다.교육용 예시. 실제 요청·발송·설정 변경을 실행한 결과가 아니다.
04기본 백업과 로그를 연결하는 시점 복구
- 기본 백업기본 백업만 있으면 그 백업 시점으로 돌아갈 수 있다.
- 로그·백업이후 변경 로그를 연속 보관하고 백업과 로그 시작 위치의 관계를 기록하면 지정 시점까지 변경을 다시 적용하는 을 구성할 수 있다.
- 예를 들어 오전 기본 백업 뒤 오후에 잘못된 삭제가 발생했다면 삭제 직전까지의 로그를 적용하는 목표를 세운다.
- 로그필요한 로그 구간이 하나라도 없으면 원하는 시점까지 이어갈 수 없다.
- 는 허용 가능한 데이터 손실 범위를 시간 등으로 표현하고 는 복구 완료까지 허용하는 시간을 뜻한다.
- 백업 주기와 손실 범위하루 한 번 덤프라는 일정만으로 두 목표를 모두 만족한다고 말할 수 없다.
- 복원복원된 구조·행 수·업무 합계·문자셋·시간대·계정 권한과 앱 요청이 정상인지, 실제 복원이 얼마나 걸리는지를 격리 환경에서 검증해야 한다.
05WAL 선행 기록과 데이터 페이지의 복구 관계
- 엔진별 구분이 절은 WAL을 설명한다. 의 , InnoDB redo log와 역할 일부가 닮아도 파일 형식과 복구 절차는 서로 바꿔 쓸 수 없다.
- 기본 백업의 종류의 WAL 시점 복구에는 호환되는 물리 기본 백업과 필요한 연속 WAL이 필요하다. pg_dump·pg_dumpall의 논리 덤프에는 WAL을 적용할 파일·페이지 정보가 없으므로 대체 입력으로 쓸 수 없다.
- 쓰기 순서데이터 페이지의 변경 내용을 디스크에 내보내기 전에 그 변경을 재구성할 WAL 기록을 먼저 안전하게 저장한다. 페이지를 즉시 모두 쓰지 않아도 충돌 복구가 가능한 근거다.
- 커밋과 페이지일반적인 지속성 설정에서 커밋 확정에 필요한 WAL이 저장되어도 모든 변경 페이지가 그 순간 데이터 파일에 반영된 것은 아니다. 로그와 페이지가 별도로 이동한다.
- 는 복구에 필요한 작업량을 제한하는 기준을 만든다. 이후 WAL과 기본 백업의 연결 관계가 있어야 올바른 상태로 재생할 수 있다.
- 보관과 재사용운영 WAL 공간은 계속 재사용된다. 에는 필요한 구간을 별도로 연속 보관해야 하며, 현재 pg_wal에 파일이 보인다는 사실만으로 과거 복구 범위를 보장하지 않는다.
0602:12의 잘못된 삭제를 제외하는 복구 시간선
- 백업 재료가상 기본 백업이 02:00에 복구 가능한 기준을 제공하고 그 이후 필요한 WAL이 모두 보관되었다고 가정한다. 실제 시작 위치는 백업 메타데이터로 확인한다.
- 목표 지정02:10의 정상 주문은 살리고 02:12의 잘못된 삭제는 제외하려고 목표 시각을 02:11로 정한다. 시각과 시간대는 로그·운영 기록에 같은 기준을 사용한다.
- 변경 재생복구는 02:12의 DELETE를 반대로 실행하는 작업이 아니다. 기본 백업에서 출발해 정상 변경을 다시 적용하고 설정한 목표에서 멈추는 과정이다.
- 손실 평가02:11 이후에 정상 변경도 있었다면 함께 제외된다. 잘못된 삭제 한 건만 제거하면서 이후 변경을 자동 보존한다고 설명하면 복구 목표를 오해한 것이다.
- 완료 시간 계산백업 준비 12분, WAL 재생 8분, 업무 검증 10분, 전환 5분의 가상 측정이라면 복구 완료에 35분이 든다. 재생 시간 8분만 측정값으로 보고하지 않는다.
| 시각 | 사건 | 02:11 복구 결과 |
|---|---|---|
| 02:00 | 기본 백업 기준 | 출발점 |
| 02:10 | 정상 주문 커밋 | 보존 |
| 02:12 | 잘못된 삭제 커밋 | 재생하지 않음 |
07복구 재료 불일치와 목표 도달 실패 구분
- 백업 식별다른 클러스터의 WAL이나 호환되지 않는 물리 파일을 섞으면 순서가 맞아도 복구 재료가 아니다. 백업 식별 정보·버전·타임라인을 함께 보관한다.
- 중간 구간 누락02:05 부근에 필요한 WAL 파일이 빠졌다면 02:10 로그가 있어도 그 사이를 건너뛰어 복구할 수 없다. 최초 누락 위치와 저장 실패를 연결한다.
- 목표 도달 여부서비스가 시작되었다는 사실과 지정 목표까지 복구했다는 사실은 별개다. 복구 로그의 도달 지점과 복원된 업무 데이터를 함께 대조한다.
- DB 밖의 재료WAL은 서버 설정 파일이나 외부 비밀 저장소 전체를 백업하지 않는다. 접속 정책·확장 모듈·암호화 자료가 없으면 데이터가 복구되어도 서비스가 열리지 않을 수 있다.
- 복제 지연과 과거 복구replica가 최신 변경을 얼마나 적용했는지와 보관 로그로 과거를 얼마나 복구할 수 있는지는 다른 수치다. 복제 위치만으로 가능 시간을 추정하지 않는다.
08복제·승격·quorum과 백업의 관계
- primary·replicaprimary-replica 구조는 primary의 변경을 replica가 받아 적용한다.
- 복제·primary비동기 복제에서는 primary가 성공 응답한 변경을 replica가 아직 받거나 적용하지 못했을 수 있다.
- replica읽기를 replica로 분산하면 막 저장한 자료가 즉시 보이지 않는 상황도 가능하다.
- 동기·반동기 방식동기·반동기 방식은 어느 시점의 응답을 기다리는지에 따라 손실 가능성·지연·가용성의 균형이 달라진다.
- replica·승격장애 때 replica를 승격하면 이전 primary가 동시에 쓰기를 받지 않도록 fencing과 진입점 전환이 필요하다.
- primary네트워크 분할에서 두 집단이 각각 primary라고 생각하면 split-brain이 된다.
- quorumquorum 기반 시스템은 투표와 멤버십으로 이를 제한하지만 제품마다 commit과 복구 규칙이 다르다.
- 복제본복제본에는 삭제와 논리 손상도 전달되므로 고가용성 복제와 과거 정상 상태를 보관한 독립 백업이 서로 보완한다.
복제 수신과 적용 스레드가 서로 다른 상태가 되는 과정
복제 상태의 Connecting·Yes·No와 로그 위치· 오류를 연결해 중단 지점을 설명한다.
실습 구성과 전제
- 사진은 의 SHOW SLAVE STATUS 형식이다. 현재 버전에서는 REPLICA 용어의 별칭을 제공할 수 있으나 화면의 필드 이름으로 해석한다.
- 세 상태를 수신→적용의 역할에 맞춰 비교한다. 암호·원본 서버 주소·발급된 자격 정보는 본문에 재현하지 않는다.
수신 연결이 아직 성립하지 않은 상태를 읽는다
- IO 스레드는 원본 서버의 변경 로그를 받아 relay log로 저장하고 스레드는 받은 이벤트를 적용한다. 두 상태 필드는 서로 다른 작업의 진행 여부다.
- IO가 Connecting이고 이 Yes이면 적용 스레드가 동작해도 새 변경을 정상 수신 중이라고 할 수 없다. 접속·인증·로그 파일 위치 문제는 IO 오류와 함께 확인해야 한다.
SHOW SLAVE STATUS\G화면과 같은 구문이다. 세로 출력에서 수신·적용 상태와 마지막 오류를 구분한다.
원본 크기로 보기 ↗- Slave_IO_Running은 Connecting, Slave_SQL_Running은 Yes다.
- Read_Master_Log_Pos=1071과 Relay_Log_Pos=4가 보이며 같은 종류의 위치 값이 아니다.
확인 기준두 필드 중 하나만 Yes인 상태를 복제 정상으로 요약하지 않는다. 마지막 IO 오류와 지연·로그 위치도 함께 읽는다.
연결 뒤 정상 대기 상태를 확인한다
- 다음 화면은 두 스레드가 Yes이며 IO 상태가 원본의 새 이벤트를 기다리는 상태다. 네트워크 수신과 적용 작업이 모두 실행 가능한 단계임을 보여 준다.
- Read_Master_Log_Pos와 Relay_Log_Pos는 서로 다른 로그 좌표이므로 숫자를 빼서 지연 바이트로 계산하지 않는다. 적용 완료 위치와 원본 위치도 파일명·좌표 체계를 맞춰 비교한다.
원본 크기로 보기 ↗- Slave_IO_Running=Yes, Slave_SQL_Running=Yes가 함께 보인다.
- Slave_IO_State는 새 이벤트를 기다리는 문구이고 Read_Master_Log_Pos=2245, Relay_Log_Pos=555가 표시된다.
확인 기준Yes/Yes만으로 모든 테이블의 일치나 영구 무지연을 보장하지 않는다. 업무 데이터 검증과 적용 좌표를 별도로 확인한다.
수신은 계속되지만 SQL 적용이 멈춘 상태를 해석한다
- 마지막 화면은 IO Yes· No다. 변경 로그를 계속 받을 수 있어도 누락된 test.t1 테이블에 이벤트를 적용하지 못해 스레드가 중단된다.
- 초기 데이터와 복제 시작 좌표가 일치해야 한다. 오류를 무조건 건너뛰면 정합성 차이를 숨길 수 있으므로 기본 백업··실패 이벤트의 관계를 복원해야 한다.
원본 크기로 보기 ↗- Slave_IO_Running=Yes인데 Slave_SQL_Running=No로 바뀐다.
- Last_SQL_Errno=1146과 test.t1이 존재하지 않는다는 오류가 표시된다.
확인 기준오류 원인을 해결한 뒤 스레드 상태뿐 아니라 누락 데이터·를 대조한다. 복제본에도 삭제와 잘못된 변경이 전파될 수 있어 독립 백업이 필요하다.
실습에서 확인한 동작 원리
- 복제 수신과 적용은 별도 작업이므로 IO 상태· 상태·마지막 오류를 같이 읽는다.
- 기본 데이터와 시작 좌표의 일치가 복제의 전제이며, 복제 성공은 시점 복구용 백업을 대체하지 않는다.
설정·출력 추가로 확인하기 7장
아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.
실습 화면 묶음 01 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 02 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 03 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 04 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 동기화 테스트 마저에 수록된 화면·도식이다.
실습 화면 묶음 05 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 동기화 확인에 수록된 화면·도식이다.
실습 화면 묶음 06 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 동기화 확인에 수록된 화면·도식이다.
실습 화면 묶음 07 1장
원본 크기로 보기 ↗- 학습 원본 · DB 복제 설정·동기화·장애 판독의 장애 해결에 수록된 화면·도식이다.
동작·명령 참고 문서
09기본 백업 이후의 변경을 재생하기
- 기본 백업·연속 로그어떤 시점의 기본 백업을 확보하고 이후 복구에 필요한 변경 로그를 연속해서 보관한 구성을 생각한다.
- 복원·기본 백업나중에 잘못된 삭제가 발생하면 운영 DB를 그대로 덮어쓰기보다 분리된 복원 환경에서 기본 백업을 준비한다.
- 목표 시점까지 재생필요한 시작 지점부터 로그를 순서대로 적용해 목표 시점 직전 또는 설정한 복구 목표에 도달하게 한다.
- WAL·시점 복구의 WAL 기반 시점 복구는 이러한 원리를 가진 사례이며 다른 DBMS에서는 로그 명칭과 준비 조건이 다르다.
- 목표 시점목표 시점은 정상 상태로 되돌리고 싶은 업무 기준이다.
- 복구 기준 시각시스템 시계, 시간대와 사건 시각을 잘못 연결하면 삭제 이후까지 재생하거나 필요한 정상 변경을 더 잃을 수 있다.
- 중간 로그 누락복구에 필요한 중간 로그가 하나라도 빠지면 그 이후 목표까지 연속적으로 도달할 수 없을 수 있다.
- 복구 시작 조건또한 기본 백업을 일관되게 복구하는 데 필요한 로그 범위부터 갖춰야 하므로 임의의 데이터 파일 묶음과 최근 로그 몇 개만으로 복구할 수 있다고 가정하지 않는다.
- 재료 확인기본 백업과 그 복구에 필요한 로그를 대조한다.
- 목표 결정사건 시각과 시간대를 확인하고 되돌릴 지점을 정한다.
- 기본 상태 복원분리된 환경에 백업을 준비한다.
- 목표까지 재생DBMS의 복구 설정에 따라 순서대로 로그를 적용한다.
- 정합성 확인데이터와 업무 기능을 확인하고 실제 복구 시간·시점을 기록한다.
설명과 함께 보는 보조 도식
기본 백업과 로그를 이용한 시점 복구
지원되는 물리 백업·로그 보관이 준비된 DBMS를 가정한 절차다.
재료 확인
기본 백업과 그 복구에 필요한 로그를 대조한다.
- 필수 조건
- 로그 연속성
전체 단계를 한 번에 읽기
- 01
재료 확인
기본 백업과 그 복구에 필요한 로그를 대조한다.
- 필수 조건
- 로그 연속성
- 02
목표 결정
사건 시각과 시간대를 확인하고 되돌릴 지점을 정한다.
- 제외
- 잘못된 삭제 이후 변경
- 03
기본 상태 복원
분리된 환경에 백업을 준비한다.
- 운영 DB
- 직접 덮어쓰지 않는 검증 단계
- 04
목표까지 재생
DBMS의 복구 설정에 따라 순서대로 로그를 적용한다.
- 중간 로그 누락
- 목표 도달 실패 가능
- 05
정합성 확인
데이터와 업무 기능을 확인하고 실제 복구 시간·시점을 기록한다.
- 완료 기준
- 서비스 사용 가능 상태
10복제본이 있어도 복구가 실패하는 이유
- 승격·복제본승격 직전에는 복제본의 로그 적용 위치와 아직 전달되지 않은 변경을 비교해 손실 가능성을 판단한다.
- 복제본·백업최신 복제본과 정상적인 과거 시점의 백업은 서로 다른 복구 수단이다.
- primary이전 primary가 살아났을 때의 쓰기 차단과 진입점 전환은 앞의 승격 절차에 따라 유지한다.
- 행 개수 검증의 한계복원 검증은 행 개수 일치만으로 끝내지 않는다.
- 업무 정합성 검증대표 조회, 참조 관계, 중요한 합계와 업무 처리를 확인하고 계정 권한·암호화 키·확장 기능·설정 파일도 점검한다.
- 복구 환경의 연결 격리복구 환경에서 의도치 않은 외부 메일이나 연동 작업이 실행되지 않도록 서비스 연결을 분리한다.
- 백업·로그백업을 읽고 로그를 재생한 시간에 검증과 전환 시간을 더해야 실제 를 평가할 수 있다.
- 재현 가능한 복원 기록성공한 복원 절차와 실패 원인 기록이 다음 복구의 신뢰도를 높인다.
- 백업마지막으로 복구한 시점과 소요 시간을 기록하고 백업 저장소 접근 권한·키 확보 절차까지 다른 담당자가 재현할 수 있어야 한다.
| 구성·관찰 대상 | 확인 정보 | 판단할 차이 |
|---|---|---|
| 기본 백업 | 완료 상태·버전·필요 파일 | 단순 파일 복사와 일관된 백업 |
| 변경 로그 | 연속성·보존 기간·적용 위치 | 복구 가능한 마지막 지점 |
| 복제 | 지연·승격·기존 주 서버 | 최신 복사본과 과거 백업 |
| 업무 검증 | 데이터·권한·연동·소요 시간 | 파일 복원과 서비스 복구 |
함께 보는 학습 자료
아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.
PostgreSQL 기본 백업과 WAL 시점 복구
장 첫머리의 Note에서 pg_dump가 WAL 재생용 기본 백업이 아닌 이유를 읽고 Making a Base Backup·Recovering Using a Continuous Archive 순으로 이동한다. 복구 재료와 목표 시점을 나누는 데 유용하다.
- 물리 기본 백업과 연속 WAL이 함께 필요한 이유
- pg_dump·pg_dumpall을 같은 복구 입력으로 사용할 수 없는 조건
- 복구 목표 이후의 정상 변경도 제외될 수 있는 범위
이해했는지 확인하기
- 백업이 일관된 시점의 데이터를 담는지 확인한다.
- 기본 백업과 로그로 복구 가능한 기간을 확인한다.
- 복제 지연과 승격 뒤 이중 쓰기 방지를 검토한다.
