0. 들어가기 전
1. 배경
얼마 전 DB 보안점검을 하면서 보안 관련된 설정을 바꿨더니 db 재실행이 안되는 문제가 발생했다.
운영 전인 DB 였고 테이블 생성, 수정 쿼리문도 다 가지고 있었기 때문에 기존의 마리아디비 자체를 밀고 재설치 후 DB 구축을 다시하였다.
추후 중요 데이터나 사용자가 있었다면 데이터를 다 날리는 큰일이 일어났을 것이다.
상무님께서 데이터 백업작업을 요청하셨고 그 과정을 기록 하려고 한다.
2. 환경
- os : Ubuntu 22.04.4 LTS
- db : mysql Ver 15.1 Distrib 10.6.16-MariaDB
1. 백업의 유형
데이터베이스를 백업하는 유형에는 크게 물리적 백업과 논리적 백업 두 가지가 있다.
물리적 백업은 실제 데이터 파일을 복사하고, 논리적 백업은 CREATE TABLE 이나 INSERT와 같이 데이터를 다시 생성할 수 있는 SQL 쿼리문을 생성한다.
1. 물리적 백업
물리적 백업에는 디스크에 있는 모든 파일과 디렉토리의 원시 사본이 포함된다. 즉 /var/lib/mysql/sqlDB 내 DB관련 파일을 다른 디스크 공간에 백업시키는 작업이다.
논리적 백업에 비해 원시 파일을 복사하는 것이 훨씬 빠르기 때문에 대규모 데이터베이스에 적합하다.
- 장점 :
- 간단하고 효율적이다. (많은 메모리나 CPU 주기 실행이 필요하지 않기 때문)
- 물리적 백업을 위한 원시 파일을 생성하는데 추가 작업이 필요하지 않으며, 원시 파일과 디렉토리를 백업 위치에 복사하기만 하면 된다.
- 논리적 백업보다 빠르다. ( 데이터베이스 객체를 만들고 데이터를 가져올 필요가 없기 때문)
- 단점 :
- 논리적 백업보다 공간이 훨씬 많이 필요하다 ( InnoDB 테이블 스페이스, 트랜잭션 로그, 실행취소 로그 등이 포함되기 때문)
- 플랫폼, 운영체제, mysql 버전 간에 이동성을 항상 보장하지 않는다.
- 원시파일에 손상이 있는 경우 백업파일에도 손상이 복사된다.
- MySQL 생태계에서 일반적으로 사용되는 물리적 백업 도구
2. 논리적 백업
논리적 백업에는 데이터베이스의 데이터가 mysql에서 sql 이나 구분된 텍스트로 해석할 수 있는 형식으로 포함된다.
데이터베이스 객체를 다시 만들고 데이터를 가져오기 위해 실행할 수 있는 sql 문의 시퀀스로 데이터베이스를 백업한다. 이러한 백업 파일은 일반적으로 ‘.sql’ 확장자를 가진다. 그렇기 때문에 로그나 설정정보는 포함하지 않는다.
이 백업의 유형은 소규모 데이터베이스에 적합하다. 논리적 백업을 복원하는 것이 물리적 백업을 복원하는 것보다 훨씬 시간이 오래 걸릴 수 있기 때문이다.
또한 논리적 백업 유형은 마이그레이션할 때도 유용하다.
- 장점 :
- 유연하다. (논리적 백업은 서버 수준(모든 데이터베이스), 데이터베이스 수준(특정 데이터베이스의 모든 테이블), 테이블 수준 또는 심지어 행 수준(지정된 WHERE 조건과 일치하는 테이블 행)에서 백업, 복원 작업이 가능하기 때문)
- 복원이 쉽다. (백업 파일을 MYSQL 클라이언트로 파이핑하고 LOAD DATA 문 또는 mysqlimport 를 사용하여 텍스트 구분 파일을 로드하기만 하면 되기 때문)
- 다른 머신에서 원격으로 실행할 수 있으므로 네트워크를 통해 데이터베이스를 백업하고 복원할 수 있다. 논리적 백업은 사용자가 가상 머신에 직접 액세스할 수 없는 Google Cloud SQL, Amazon RDS, Microsoft Azure와 같은 클라우드 데이터베이스에 유용하다.
- 데이터 손상을 방지할 수 있다. (물리적 백업은 손상될 수 있으며 이는 인증될 때까지 알 수 없다. 논리적 백업은 일반적으로 텍스트 파일이므로 텍스트 편입기로 검토하여 손상을 찾아내기가 더 쉽고, 손상이 거의 일어나지 않는다.)
- 마이그레이션에 유용하다. (물리적 백업과 달리 논리적 백업은 플랫폼, 운영체제, MySQL 버전 간에 이동성이 높기 때문)
- 논리적 백업은 압축성이 뛰어나다.
- 단점 :
- 데이터베이스에 SQL 쿼리를 실행하여 스키마와 행을 얻은 다음 논리적 형식으로 변환해야하므로 생성속도가 느리다.
- MySQL 에서 테이블을 만들고 행을 가져오고 색인을 다시 빌드하기 위해 SQL 문을 실행해야 하기 때문에 복원도 느리다.
- 물리적 백업에 비해 논리적 백업에는 백업과 복원작업에 더많은 리소스(CPU, RAM, 디스크I/O)가 필요하다.
- 몇 가지 일반적인 논리적 백업 도구
다음에는 백업의 방식 - Full(전체) / Incremental(증분) / Differential(차등) 에 대해 알아보고
이후 실습을 진행해보자.
📎 참고 링크
'Programming > DataBase' 카테고리의 다른 글
[Database-MySQL] Select 쿼리로 테이블 정의서 만들기 (sql to 정의서) (1) | 2024.09.20 |
---|---|
[Database] 물리적 백업하기 ! , 풀백업 + 증분백업 (mariabackup) (0) | 2024.06.14 |
[Database] 논리적 백업, full-backup 실습 - mysqldump (0) | 2024.05.17 |
[Database] 백업의 방식 - Full(전체) / Incremental(증분) / Differential(차등) (0) | 2024.05.10 |