xtrabackup 사용시 이점

- 빠르고 안정적으로 완료되는 백업

- 백업 중 중단없는 트랜잭션 처리

- 디스크 공간 및 네트워크 대역폭 절약

- 자동 백업 확인

- 더 빠른 복원시간으로 더 높은 가동시간 

 

지원버전 

- xtrabackup 8.0.x 버전은 MySQL 8.0.x 버전 호환

- xtrabackup 2.4 버전은 MySQL 5.6, 5.7 버전 호환

 

지원되는 스토리지 엔진

- InnoDB, XtraDB, MyRocks 스토레지 엔진의 완전 비차단 백업 지원

  - MyRocks 스토리지 엔진은 8.0.6 버전부터 지원 

- MyISAM, Merge, Archive, Patition Table, Trigger, Database Option 의 경우 백업이 끝날때 쓰기를 일시 중지하여 백업 가능 

- xtrabackup 8.0 은 TukuDB 스토리지 엔진 지원 안함 

 

xtrabackup 기능 

- 데이터베이스를 중지하지 않고 InnoDB 백업 생성

- MySQL 증분 백업

- 압축된 MySQL 백업을 다른 서버로 스트리밍

- 온라인으로 MySQL 서버간의 테이블 이동

- 새로운 MySQL 복제 복제본을 쉽게 생성

- 서버에 부하를 추가하지 않고 MySQL 백업 

 

xtrabackup 동작 방식

- xtrabackup 은 InnoDB의 crash-recovery 기능을 기반으로한다.

- InnoDB 데이터 파일을 복사하므로 내부적으로 일관성이 없는 데이터 생성된다. 

  그런 다음 파일에 대해 응급 복구를 수행하여 일관되고 사용 가능한 데이터베이스를 다시 만든다. 

- 이 작업은 InnoDB가 트랜잭션 로그라고도하는 Redo Log를 유지하기 때문에 작동한다. 

- Redo Log에는 InnoDB 데이터에 대한 모든 변경 기록이 포함된다.

  InnoDB가 시작되면 데이터 파일과 트랜잭션 로그를 검사하는 단계를 수행한다.

  커밋된 트랜잭션 로그 항목을 데이터 파일에 적용하고 데이터를 수정했지만

  커밋하지 않은 모든 트랜잭션에 대해 실행 취소 작업을 수행한다. 

- xtrabackup 은 시작할때 로그 시퀀스 번호(LSN)을 기억한 당므 데이터 파일을 복사하는 방식으로 작동한다. 

  이를 수행하는데 약간의 시간이 걸리므로 파일이 변경되면 다른 시점의 데이터베이스 상태를 반영한다. 

- xtrabackup 은 트랜잭션 로그파일을 감시하는 백그라운드 프로세스를 실행해서 변경 사항을 복사한다. 

  트랜잭션 로그가 라운드 로빈 방식으로 작성되고 재사용 가능성이 있기 때문에 이를 지속적으로 수행한다. 

- xtrabackup 실행후 데이터 파일이 변경될 때마다 트랜잭션 로그 레코드가 필요하다. 

- xtrabackup은 FLUSH TABLES WITH READ LOCK의 경량 대안으로 사용 가능한 백업 작업을 사용한다. 

  이 기능은 MySQL 5.6 이후부터 사용가능하며, MySQL 8.0에서는 LOCK INSTANCE FOR BACKUP 문을 통해

  인스턴스 수준 백업 잠금을 획득할 수 있다. 

- 잠금은 xtrabackup 이 모든 InnoDB/XtraDB 데이터 및 로그 백업을 완료한 후에

  MyISAM 및 non-InnoDB 테이블에 대해서만 수행된다.

- LOCK INSTANCE FOR BACKUP 또는 LOCK TABLES FOR BACKUP을 효과적으로 사용하려면 

  performance_schema.log_status를 쿼리하기 위해 BACKUP_ADMIN 권한이 필요하다.

- xtrabackup은 인스턴스에 InnoDB 테이블만 포함된 경우 백업 작금 및 FLUSH TABLES WITH READ LOCK을 방지한다. 

  이 경우 xtrabackup 은 perfomance_schema.log_status 에서 binary log position를 가져온다. 

  --slave-info 로 xtrabackup을 시작할때 MySQL 8.0에서 FLUSH TABLES WITH READ LOCK가 여전히 필요하다. 

-  Percona Server for MySQL 8.0 의 log_status 테이블은 relay log 좌표를 포함하도록 확장되어

   --slave-info 옵션을 사용해도 잠금이 필요하지 않다. 

 

- 서버에서 backup lock을 지원하면 xtrabackup은 InnoDB 데이터를 복사하고 LOCK TABLES FOR BACKUP을 실행한

  다음 MyISAM 테이블을 복사한다. 이 작업이 완료되면 파일 백업이 시작된다.

  .frm, .MRG, .MYD, .MYI, .ARM, .ARZ, .CSM, .CSV, .sdi 및 .par 파일을 백업한다. 

- 그 후 xtrabackup은 LOCK BINLOG FOR BACKUP 을 사용하여 SHOW MASTER / SLAVE STATUS 에서 확인한 

  Binary log position, Exec_Master_Log_Pos, Exec_Gtid_Set 을 변경할 수 있는 모든 작업을 차단한다. 

- xtrabackup 은 Redo Log 파일 복사를 완료하고 Binary log position을 가져온다. 

  이것이 완료되면 xtrabackup은 Binary log와 테이블의 잠금을 해제한다. 

- 마지막으로 Binary log position은 STDERR에 인쇄되고 xtrabackup 은 모든 것이 정상이면 0을 반환하고 종료된다. 

  xtrabackup 의 STDERR은 파일에 기록되지 않는다. 

  파일로 리디렉션 해야한다. (예 : xtrabackup OPTIONS 2>backupout.log)

 

- 백업 디렉토리에 다음 파일을 생성한다. 

  - backup-my.cnf

    my.cnf 파일의 백업이 아니며, --prepare 중에 InnoDB 의 미니 인스턴스를 시작하기 위한 정보가 포함되어 있다.

  - xtrabackup_checkpoints

    백업 유형(전체 또는 증분), 상태(ex, prepared) 및 포함된 LSN 범위가 저장되어 있으며

    이 정보는 증분 백업에 사용된다. 

  - xtrabackup_binlog_info

    SHOW MASTER STATUS의 확인된 Binary Log 파일 및 Position 

  - xtrabackup_binlog_pos_innodb

    Binary Log 파일 및 InnoDB 또는 XtraDB 테이블의 현재 위치 

  - xtrabackup_binary

    프로세스에 사용되는 xtrabackup 바이너리 

  - xtrabackup_logfile

    --prepare 를 실행하는데 필요한 데이터를 포함한다.

    이 파일이 클수록 --prepare 프로세스에 걸리는 시간이 늘어난다. 

  - <table_name>.delta.meta

    증분 백업을 수행할때 생성되는 파일로 페이지 크기, 압축된 페이지 크기 및 공간 ID와 같은

    테이블별 delta metadata 가 포함된다. 

  - xtrabackup_slave_info

    --slave-info 옵션을 사용하는 경우 생성되며 복제본 설정에 필요한 CHANGE MASTER 문이 기록된다. 

  - xtrabackup_galera_info

    --galera-info 옵션을 사용하는 경우 생성되며 Galera 및 Percona XtraDB 클러스터 정보가(wsrep_local_state_uuid 및 wsrep_last_committed 상태 변수의 값) 기록된다. 

    

- perpare 단계 동안 xtrabackup은 복사된 트랜잭션 로그 파일을 사용하여 복사된 데이터 파일에 대해 응급복구를 수행한다.  이 작업이 완료되면 데이터베이스를 복원하고 사용할 수 있다.

- perpare(recovery) 프로세스후에 InnoDB의 데이터는 백업이 완료된 시점으로 롤백되지 않고 백업이 완료된 시점으로 롤 포위드 된다. 이 시점은 FLUSH TABLES WITH READ LOCK이 취해진 위치와 일치하므로 MySQL 데이터와 준비된 InnoDB 데이터가 동기회된다. 

 

백업 복원 

- xtrabackup 으로 백업으로 복원하려면 --copy-back 또는 --move-back 옵션을 사용한다. 

- xtrabackup은 my.cnf에서 datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir 변수를

  읽고 디렉토리가 있는지 확인한다.

- 아래의 순서로 복사한다.

  1) MyISAM 테이블, 인덱스 등 (.MRG, .MYD, .MYI, .ARM, .ARZ, .CSM, .CSV, .sdi 및 par 파일)

  2) InnoDB 테이블과 인덱스

  3) 로그

- 파일을 복사 할 때 파일의 속성을 보존한다.

  - 데이터베이스 서버를 시작하기 전에 복원된 데이터 파일의 소유권 확인, 변경 한다.

- --move-back 옵션을 사용하여 백업을 복원할 수 있다. 

   --copy-back 옵션과 비슷하지만 파일을 복사하는 대신 대상위치로 이동하는다는 점만 다르다. 

    대상위치로 이동하기 때문에 속도는 빠르지만 백업 파일이 이동되어 사라진다. 

 

참고:

https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

 

'MySQL' 카테고리의 다른 글

MySQL Performance Best Practice  (0) 2021.12.26
xtrabackup 8.0 (2)  (0) 2021.07.06
Hash join in MySQL 8  (0) 2021.06.25
Redo Log  (0) 2021.06.25
Update process  (0) 2021.06.19

+ Recent posts