티스토리 뷰

개요

  • 데이터베이스는 모든 회사의 중추라고 할 수 있다. 데이터베이스의 데이터가 삭제되면 최악의 경우 회사가 망할 수도 있다. 그래서 데이터베이스에서 가장 중요한 것은 바로 백업과 신속한 복구라고 할 수 있다. MariaDB는 전통적으로 mysqldump라는 백업 및 복구 유틸리티를 제공한다. 주요 기능은 전체 또는 일부 데이터베이스의 데이터를 SQL 쿼리문으로 백업해주는 것인데, 이는 백업과 복구에 있어 상당한 소요 시간을 요구한다. Percona가 무료로 제공하는 XtraBackup 유틸리티를 이용하면 쿼리문이 아닌 바이너리 데이터를 그대로 백업하기 때문에 백업과 복구에 걸리는 시간을 획기적으로 단축할 수 있다. (실제 파일을 복사하는 시간 정도만 소요된다.)

XtraBackup 버전별 제약사항

  • Percona XtraBackup은 데이터베이스 버전에 따라 올바른 버전을 설치해야 정상적으로 작동함에 유의해야 한다. [관련 링크1] [관련 링크2]
  • MariaDB 5.x.x, 10.0.xpercona-xtrabackup-22 패키지를 설치해야 한다.
  • MariaDB 10.1 이상부터는 Mariabackup이 권장된다. XtraBackup10.1, 10.2에서는 제한적으로만 작동하고, 10.3부터는 아예 지원이 되지 않는다.

XtraBackup 구성

  • XtraBackupC로 작성된 xtrabackup 바이너리와 Perl로 작성된 innobackupex 스크립트 2개 명령어로 구성되어 있다. 내부적으로는 innobackupex 실행시 xtrabackup을 호출하는 형태로 실행된다. [관련 링크]

XtraBackup 설치

  • CentOS 7에서의 XtraBackup의 설치 방법은 아래와 같다.
# EPEL 저장소 설치, XtraBackup 설치시 EPEL 저장소가 제공하는 libev 패키지를 요구하기 때문
$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# Percona 저장소 설치
$ sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# XtraBackup 2.2 설치
$ sudo yum install percona-xtrabackup-22

# 설치된 XtraBackup 버전 확인
$ xtrabackup --version
xtrabackup version 2.2.13 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 70f4be3)

XtraBackup 사전 설정

  • 본격적인 XtraBackup 사용에 앞서 아래와 같이 사전 설정이 필요하다.
$ sudo nano /etc/my.cnf
[mysqld]
innodb_log_file_size=5M

[xtrabackup]
datadir=/var/lib/mysql

# my.cnf 설정 파일에 mysql 권한 부여
$ sudo chown -R mysql: /etc/my.cnf

XtraBackup 백업 실행

  • 백업 실행 방법은 아래와 같다.
# 현재 데이터베이스에 대한 백업 실행
$ sudo innobackupex --defaults-file=/etc/my.cnf --no-lock /backups/
innobackupex: Backup created in directory '/backups/2019-10-06_13-37-32'
191006 13:37:35  innobackupex: Connection to database server closed
191006 13:37:35  innobackupex: completed OK!

# 백업된 파일 확인
$ sudo ls -al /backups/2019-10-06_13-37-32
-rw-r--r--. 1 root root      262 Oct  6 13:37 backup-my.cnf
-rw-r-----. 1 root root 18874368 Oct  6 13:37 ibdata1
drwxr-xr-x. 2 root root     4096 Oct  6 13:37 mysql
drwxr-xr-x. 2 root root     4096 Oct  6 13:37 performance_schema
drwxr-xr-x. 2 root root        6 Oct  6 13:37 test
-rw-r-----. 1 root root       89 Oct  6 13:37 xtrabackup_checkpoints
-rw-r--r--. 1 root root      534 Oct  6 13:37 xtrabackup_info
-rw-r-----. 1 root root     2560 Oct  6 13:37 xtrabackup_logfile

# 백업된 파일을 이용한 복구 준비 실행
$ sudo innobackupex --defaults-file=/etc/my.cnf --apply-log /backups/2019-10-06_13-37-32
191006 13:40:43  innobackupex: completed OK!
  • 백업시 --no-lock 옵션을 사용하면 백업 실행 중에 테이블 락이 발생하지 않는 장점이 있다. 주의할 점은 이 옵션으로 백업시 DDL(테이블 및 인덱스 생성 및 변경 등) 쿼리문을 실행하면 안된다. 또한, InnoDB 스토리지 엔진이 아닌 테이블에 대한 DML 쿼리문이 실행되어서도 안된다. 앞서의 상황에 해당할 경우 백업 데이터의 올바른 정합성이 보장되지 않는다.
  • 백업 복구 준비시 --apply-log 옵션은 백업 실행 중에 발생한 시간의 경과에 따른 백업 데이터의 정합성을 보정해주는 역할을 한다. 꼭 백업 직후에 실행할 필요는 없으며, 백업 복구 전에만 1회 실행하면 된다.
  • 백업, 백업 복구 준비, 복구 모든 행위에 있어, 최종적으로 콘솔에 completed OK! 메시지가 출력되지 않으면 완전히 실행된 것이 아니니 유의해야 한다.

XtraBackup 복구 실행

  • 복구 방법은 아래와 같다.
# 복구 전 MariaDB 서비스 종료
$ sudo service mysql stop

# 복구 전 MariaDB 데이터 파일 삭제
$ sudo rm -rf /var/lib/mysql/*

# 백업된 파일을 이용한 복구 실행, 복사 형태로 실행
$ sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /backups/2019-10-06_13-37-32
191006 13:42:50  innobackupex: completed OK!

# 복구된 파일 목록에 mysql 권한 부여
$ sudo chown -R mysql: /var/lib/mysql/*

# 복구된 파일 목록 확인
$ sudo ls -al /var/lib/mysql/*

# 복구 후 MariaDB 서비스 재시작
$ sudo service mysql start

# MariaDB 클라이언트 실행
$ sudo mysql -u root
# 복구된 데이터베이스 정상 조회 확인
> SHOW DATABASES;
  • 복구시 --copy-back 옵션은 백업 데이터를 데이터베이스의 데이터 디렉토리로 복사하는 역할을 수행한다. 복구 전 반드시 데이터베이스 인스턴스를 종료하고, 대상 데이터 디렉토리의 존재하는 모든 파일을 삭제해야 한다. 한편 --move-back 옵션은 복사 대신 이동을 수행한다. 디스크에 용량이 부족할 경우 고려할만한 옵션이다.

참고 글

댓글
댓글쓰기 폼