백업과 관련한 핵심 용어
- 핫, 윔 콜드 백업
- 복원과 복구
- 복원은 백업에서 데이터를 검색하여 MySQL에 로드하거나 예상하는 위치에 파일을 배치하는 것
- 복구는 문제가 발생한 후 시스템 또는 시스템의 일부를 되살리는 전체 프로세스
- 원시 백업과 논리적 백업
- 원시 백업: 파일시스템의 파일 복사본
- 논리적 백업: 데이터를 재구성하는 데 필요한 SQL 문
백업을 하는 이유
- 재해복구, 마음을 바꾸는 사람들, 감사, 테스팅 등의 이유로 백업을 하게 된다.
복구 요구 사항 정의
- 백업 및 복구 전략을 계획할 때 고려해야 할 두 가지 요구사항
- RPO(복구 시점 목표)
- RTO(복구 시간 목표)
- 얼마나 많은 데이터를 잃어도 좋고, 복구할 때까지 얼마나 오래 기달릴 수 있는지를 정의한다.
MySQL 백업 솔루션 설계
- RPO 및 RTO를 알면 백업 전략에 도움이 된다.
- 특정 시점으로 복구가 필요한지?
- 어젯밤의 백업으로 복구하고 그 이후로 수행된 모든 작업이 손실되어도 상관 없는지?
- 일반적으로 손실을 감당할 수 있는 양이 많을수록 백업을 수행하기가 더 쉽다.
- 특정 시점 복구에도 다양한 방식이 있다.
- 소프트 특정 시점 복구 요구 사항
- 문제가 발생한 위치에 충분히 가깝게 데이터를 다시 생성할 수 있음을 의미한다.
- 하드 특정 시점 복구 요구 사항
- 끔찍한 일이 발생하더라도 커밋된 트랜잭션의 손실을 결코 용납할 수 없다는 것을 의미한다.
온라인 백업 또는 오프라인 백업
- 오프라인 백업
- MySQL을 종료하고 오프라인 상태에서 백업을 만드는 것이 손상이나 불일치의 위험을 최소화하면서 일관된 데이터 복사본을 얻는 가장 쉽고 안전한 최선의 방법
- 그러나, 서버를 오프라인으로 전환하는 것은 많은 비용이 든다.
- 온라인 백업
- 결과적으로 온라인 백업이 되도록 설계해야한다.
- 백업을 설계할 때에는 백업 시간 대 백업 부하 트레이드 오프를 고려해야 한다.
논리적 백업 또는 원시적 백업
- 논리적 백업
- 장점
- grep, sed와 같은 커맨드 라인과 편집기로 조작 및 검사가 가능한 일반 파일로, 데이터를 복원하거나 복원하지 않고 검사할때 매우 유용하다.
- 복구가 간단하다.
- MySQL 호스트와 다른 시스템에서 네트워크를 통해 백업 및 복원할 수 있다.
- 기본 파일시스템에 액세스할 수 없는 클라우드 기반 MySQL 시스템에서 사용할 수 있다.
- mysqldump가 백업할 행을 제한하는 WHERE 절과 같은 많은 옵션을 허용할 수 있기 때문에 매우 유연하다.
- 스토리지 엔진과 독립적이다.
- 데이터 손상을 방지 할 수 있다.
- 원시파일을 복사할 때 디스크 드라이브에 문제가 생기면 백업을 확인하지 않는 한 알아차리지 못하고 나중에 사용할 수 없는 상황이 될 수 있다.
- 원시 파일 사본을 제대로 가져올 수 없을 때 신뢰할 수 있는 논리적 백업을 얻을 수 있다.
- 단점
- 서버에서 생성하는 작업을 수행하므로 더 많은 CPU 주기를 사용한다.
- 경우에 따라서는 논리적 백업이 기본 파일보다 클 수 있다.
- 데이터의 ASCII 표현은 스토리지 엔진이 데이터를 저장하는 방식보다 효율적이지는 않다.
- 데이터를 덤프하고 복원할때 사소한 버그 등이 문제를 일으킬 수 있다.
- 논리적 백업에서 복원하려면 MySQL 명령문을 로드 및 해석하고 저장소 형식으로 변환하고 인덱스를 재구성해야 하는데 해당 작업이 많은 시간을 필요로 할 수 있다.
- 원시 백업
- 장점
- 백업을 위해 원하는 파일을 다른 곳에 복사하기만 하면 된다.
- MySQL 서버가 SQL을 실행하거나 인덱스를 구축할 필요가 없기 때문에 원시 백업을 복원하는 것이 더 빠를 수 있다.
- 단점
- InnoDB의 원시 파일은 논리적 백업보다 훨씬 큰 경우가 많다.
- InnoDB의 테이블스페이스는 일반적으로 사용하지 않는 공간이 많다.
- 테이블 데이터 저장 이외 용도로 상당히 많은 공간이 사용된다.
- 바람직한 백업 방식
- 원시 복사본을 만들고 다음 결과 데이터로 MySQL 서버 인스턴스를 시작하고 mysqlcheck를 실행하는 두가지 방식을 혼합하는 것이 좋다.
- 주기적으로 mysqldump로 데이터를 덤프하여 논리적 백업을 가져와 덤프 중에도 운영 서버에 과도한 부담을 주지 않고 두 접근 방식의 이점을 얻을 수 있다.