MySQL - InnoDB Page Tracking 을 사용한 Xtrabackup- 변경 사항 추적 기능

Share

Last Updated on 1월 27, 2024 by Jade(정현호)

안녕하세요 
이번 포스팅은 MySQL 8버전에서 추가된 InnoDB Page Tracking 기능 과 Xtrabackup 을 활용하는 방법에 대해서 확인해보려고 합니다. 

InnoDB Page Tracking

MySQL Enterprise Backup(이하 MEB) 는 MySQL에 대한 백업 및 복구를 제공하는 엔터프라이즈 제품입니다.

MEB 는 사용 가능한 다양한 유형의 기능 중에서 다음 두 가지 유형 기능이 중요 합니다.

• Full Backup : 전체 MySQL 인스턴스를 백업 - 각 MySQL 데이터베이스의 모든 테이블

• Incremental Backup : 이전(전체/증분) 백업 이후 변경된 데이터만 포함하는 백업


증분 백업 을 수행하려면 먼저 MEB 가 이전 백업 이후 수정된 모든 페이지 목록을 알아야 합니다. 그러나 이전까지는 수정된 페이지를 내부적으로 추적할 수 있는 기능(인프라)가 없었기 때문에 MEB에서 증분 백업 수행 시 수정된 페이지를 파악하기 위해 각 테이블 스페이스 파일의 각 페이지를 스캔하는 무차별 대입 방법에 의존해야 했습니다.

이것은 짐작할 수 있듯이 매우 값비싼(Cost가 비싼) 작업입니다.

MySQL 에서 인스턴스 복제를 더 쉽게 만들기 위해서 MySQL 8.0.17 버전 부터 Clone 플러그인 을 도입하였습니다.
Clone 플러그인이 도입이 되면서 복제를 더 쉽고 빠르게 하기 위해서 InnoDB 내에서는 수정된 페이지를 추적하는 기능(인프라)이 추가되게 되었습니다.

이것은 최소한의 추적 기능이었기 때문에 MEB 가 증분 백업에 사용할 수 있는 본격적인 기능으로 만들기 위해서 restarts and instance crashes 시 수정된 페이지를 추적하는 기능도 추가하여 확장하였습니다.
또한 MEB가 기능과 상호 작용하여 추적을 활성화/비활성화하고 필요한 페이지 추적 데이터를 가져올 수 있는 인터페이스가 도입되었습니다.

페이지 추적 기능 사용시 더 많은 정보를 위해서 크래시 복구 메커니즘과 관련된 InnoDB의 일부 내부를 이해해야 하는 것이 좋습니다.
향후에 이 내용을 추가로 더 정리하도록 하겠으며, 관련되어서는 아래 문서를 먼저 확인 해보셔도 좋을 것 같습니다.

         

Page Tracking 지원 및 변경내역

Xtrabackup 은 이전 부터 MEB와 유사하게 Change Tracking 기능을 사용할 수 있었으며, 사용하기 위해서는 Percona Server for MySQL 의 XtraDB changed page tracking 사용해야 합니다.


Xtrabackup 8.0.27 버전 부터는 MySQL의 InnoDB Page Tracking 기능을 활용한 Incremental Backup 을 지원하기 시작하였습니다.



또한 변경 사항으로 Percona Server for MySQL8.0.27 버전 부터는 자체적인 page tracking 기능은 deprecated 되었으며, MySQL page tracking feature 를 사용하는 것을 가이드(권장) 하고 있습니다.

Important

Starting with Percona Server for MySQL 8.0.27, the page tracking feature is deprecated and may be removed in future versions.

We recommend using the MySQL page tracking feature. For more information, see MySQL InnoDB Clone and page tracking.

         

Xtrabackup Using InnoDB Page Tracking

버전 관련

MySQL 에서 Change Tracking 기능을 사용하면서 Xtrabackup 에서도 해당 기능을 이용하려면 아래와 같은 버전 이상으로 사용하시면 됩니다.

- MySQL 8.0.17 이상
- Xtrabackup 8.0.27 이상
     

MySQL 에서의 설정

MySQL 에서 InnoDB Page Tracking 를 먼저 활성화를 해야 하며 그러기 위해서 먼저 component 설치를 해야 합니다.

• Component 설치는 아래와 같이 진행합니다

-- 컴포넌트 설치 전 확인
SELECT COUNT(1) FROM mysql.component
WHERE component_urn='file://component_mysqlbackup';
+----------+
| COUNT(1) |
+----------+
|        0 |
+----------+


-- 컴포넌트 설치
INSTALL COMPONENT "file://component_mysqlbackup";


-- 컴포넌트 설치 후 확인
SELECT COUNT(1) FROM mysql.component
WHERE component_urn='file://component_mysqlbackup';
+----------+
| COUNT(1) |
+----------+
|        1 |
+----------+

       

Xtrabackup 에서 기능 사용

Xtrabackup 에서 MySQL InnoDB Page Tracking 을 사용한 백업을 수행하기 위해서는 "--page-tracking " 옵션을 사용하시면 됩니다.

--page-tracking옵션 을 사용하여 전체 백업을 생성하는 예입니다.
xtrabackup --backup \
--target-dir=$FULL_BACK \
--page-tracking


--page-tracking옵션 을 사용하여 증분 백업을 생성하는 예입니다.
xtrabackup --backup \
--target-dir=$INC_BACKUP \
--incremental-basedir=$FULL_BACKUP \
--page-tracking

          

필요 권한

MySQL 8.0 버전 그리고 Xtrabackup 8.x 버전에서 백업 수행 시 백업을 수행하는 DB 계정에 대해서 이전보다 추가로 권한이 필요한 부분에서 MySQL InnoDB Page Tracking 기능을 사용하면서 추가로 더 필요한 권한이 있습니다.

• 기존의 부여된 권한

grant RELOAD, BACKUP_ADMIN ,LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO '계정'@'호스트'; 
grant select on performance_schema.log_status to '계정'@'호스트';


• 추가로 필요한 권한

grant select on mysql.component to '계정'@'호스트';
grant SYSTEM_VARIABLES_ADMIN on *.* TO '계정'@'호스트'; 

      

백업 수행 속도 비교

백업 수행 속도 테스트는 아래의 조건에서 테스트를 진행하였습니다.

초기 데이터 사이즈: 40G
추가된 데이터 사이즈: 10GB

초기 데이터 사이즈인 40GB 를 입력 후 에 Full Backup 을 수행하고, 추가 데이터 10G 를 입력 후 Incremental Backup 을 수행하였습니다.

• Incremental Backup 실행 시 수행속도에 비교입니다.

InnoDB Page Tracking 사용 유무 수행시간
미사용 15~17분
사용 3~4분

           

Reference

Reference URL
mysql.com/page-tracking
percona.com/incremental_backup
percona.com/page_tracking
percona.com/incremental-backup-in-mysql
percona.com/5.6/changed_page_tracking
percona.com/8.0/changed_page_tracking
percona.com/release-notes/percona-xtrabackup


관련된 다른 글

 

 

 

 

       

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x