본문 바로가기
Database/Mysql

Xtrabackup 설치 및 백업, 복구 방법

by 화곡공룡 2023. 2. 17.
반응형
반응형

안녕하세요

Xtrabackup 설치 및 백업, 복구 방법에 대해 정리하였습니다.

mysql DB에서 Data를 Backup 할 수 있는 방식은 기본적으로 mysqldump를 제공하고 있습니다.

mysqldump는 insert 문으로 파일을 내려받는 방식으로 간단하게 백업 및 복구를 할 수 있어 다른 DB에 이관이 쉬운 장점이 있지만 대용량 Database에서는 Backup과 복구 시간이 오래걸린다는 단점이 있습니다.

 

Percona사에서 제공하는 XtraBackup은 InnoDB 및 XtraDB Database에 대해 DB는 무중단 상태에서 수행할수 있는 Hot Backup 방식을 지원합니다.

xtrabackup은 Data파일을 복사하는 방식으로 물리적인 Backup의 DataCopy 방식으로 빠른 Backup과 Restore가 장점입니다. Data파일 뿐만아니라 redo로그와 undo로그도 백업을 하기때문에 시점복구도 가능하며 Full Backup과 Incremental Backup을 지원하며 Stream 방식도 지원하고 있습니다.

 

참고로 mariadb는 10.5 버전 이후부터는 mariabackup을 지원하고 있어 mariadb를 사용하고 계신다면 10.5 이하 버전에서만 지원이 가능하며 이후 버전에서는 mariadb에서 신규로 mariabackup을 이용하면 됩니다.

1. xtrabackup 설치

설치 환경은 Red Hat 계열인 Cent OS와 mysql 5.7 버전으로 Xtrabackup은 2.4버전으로 설치하였습니다. 만약 mysql8.0 이상의 버전이라면 Xtrabackup 8.x 버전으로 설치하여야 합니다.

1. Xtrabackup 설치
wget <https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.31-24/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.31-24.1.el7.x86_64.rpm>
rpm -ivh percona-xtrabackup-80-8.0.31-24.1.el7.x86_64.rpm
yum install percona-xtrabackup-80-8.0.31-24.1.el7.x86_64
2. qpress 설치
yum install qpress

2. 설치 확인
xtrabackup -v
qpress -v
  • Backup을 Percona 홈페이에서 Download를 받거나 OS에서 직접 Download 할 수 있다.
1. Web Download
<https://www.percona.com/software/mysql-database/percona-xtrabackup>

2. 서버에서 직접 Download
[root@mariadb-node1 backup]#
[root@mariadb-node1 backup]# wget <https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/tarball/percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz>
--2023-02-02 10:22:56--  <https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/tarball/percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz>
Resolving downloads.percona.com (downloads.percona.com)... 162.220.4.222, 162.220.4.221, 74.121.199.231
Connecting to downloads.percona.com (downloads.percona.com)|162.220.4.222|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 103055360 (98M) [application/x-gzip]
Saving to: ‘percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz’

100%[=============================================================================================================================>] 103,055,360  403KB/s   in 3m 23s

2023-02-02 10:26:20 (496 KB/s) - ‘percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz’ saved [103055360/103055360]

[root@mariadb-node1 backup]#
  • 압축을 해제 및 Backup 디렉토리 변경
1. 압축해제
[root@mariadb-node1 backup]# tar xvf percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz
percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12/
percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12/man/
percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12/man/man1/
.
.
.
percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12/bin/xbcloud
percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12/bin/xtrabackup
percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12/bin/xbcrypt

2. 디렉토리 변경
[root@mariadb-node1 backup]# cd percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12 xtrabackup

2. qpress 설치

compress 기능이 있으며 이 기능을 사용하기 위해서는 qpress 툴을 별도로 설치하여야 합니다.

  • Install
1. 설치파일 Download
[root@mariadb-node1 backup]# sudo yum install <https://repo.percona.com/yum/percona-release-latest.noarch.rpm>
Loaded plugins: fastestmirror
percona-release-latest.noarch.rpm                                                                                                               |  20 kB  00:00:00
Examining /var/tmp/yum-root-ISpGf7/percona-release-latest.noarch.rpm: percona-release-1.0-27.noarch
Marking /var/tmp/yum-root-ISpGf7/percona-release-latest.noarch.rpm as an update to percona-release-1.0-26.noarch
Resolving Dependencies
--> Running transaction check
.
.
.

Updated:
  percona-release.noarch 0:1.0-27

Complete!

2. qpress 설치
[root@mariadb-node1 backup]# yum install qpress
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * epel: mirror-kr.misakamikoto.network
 * extras: mirror.kakao.com
.
.
.

Running transaction
  Installing : qpress-11-3.el7.x86_64                                                                                                                              1/1
  Verifying  : qpress-11-3.el7.x86_64                                                                                                                              1/1

Installed:
  qpress.x86_64 0:11-3.el7

Complete!
[root@mariadb-node1 backup]#

 

3. Backup용 DB 계정 생성

xtrabackup용 DB 계정과 권한을 설정합니다. 권한은 필수 권한에 대해서만 설정합니다. MySQL 5.7버전과 8.0버전의 권한 설정이 조금 다릅니다.

5.7 Version

1. 계정 생성
root@localhost:(none) 10:39:48>create user 'xtra'@'localhost' IDENTIFIED BY 'Xtrabackup1!';
Query OK, 0 rows affected (0.240 sec)

2. 권한 설정
root@localhost:(none) 10:39:56>grant RELOAD, LOCK TABLES, BACKUP_ADMIN, CREATE TABLESPACE, PROCESS, REPLICATION CLIENT ON *.* TO 'xtra'@'localhost';
Query OK, 0 rows affected (0.019 sec)

root@localhost:(none) 10:40:02>

8.0 Version

1. 계정 생성
mysql>create user 'xtra'@'localhost' IDENTIFIED BY 'Xtrabackup1!';

2. 권한 설정
mysql> GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtra'@'localhost';
mysql> GRANT SELECT ON performance_schema.log_status TO 'xtra'@'localhost';
mysql> GRANT SELECT ON performance_schema.keyring_component_status TO 'xtra'@'localhost' ;
mysql> GRANT SELECT ON performance_schema.replication_group_members TO 'xtra'@'localhost' ;
mysql> FLUSH PRIVILEGES;

4. Parameter 설정

xtrabackup도 my.cnf파일을 기본적으로 읽습니다. config 파일에서 지정 순서대로 읽으며 재정의하려면 [xtrabackup]로 별도 참조하는 옵션을 설정을 할 수 있습니다.

[root@mariadb-node1 backup]# vi /etc/my.cnf

-- Xtrabackup Add
[xtrabackup]
target_dir = /backup/mysql/

5. Backup

Backup은 Full Backup, Incremental Backup으로 설정할 수 있습니다.

compress 옵션을 지원하며 qpress가 설치되어 있어야 합니다.

stream 옵션을 사용하면 하나의 압축파일로 저장할 수 있으며 compress 옵션과 같이 사용시 파일 용량을 줄일 수 있습니다. 단, xbstream포맷으로 저장시 compress 옵션이 허용됩니다.

Option

  • --defaults-file : my.cnf 참조 위치
  • --backup : 백업실행
  • --user : DB 백업 계정
  • --password : DB 계정 패스워드
  • --target-dir : 백업파일 저장 위치
  • --socket : 소켓파일 저장 위치
  • --compress : 압축
  • --stream : tar 또는 xbstream 포맷 선택 (8.0에서는 tar모드는 지원 안함)

Full Backup (전채백업) Sample

1. Default
xtrabackup --defaults-file=/etc/my.cnf --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/full --socket=/tmp/mysql.sock

2. compress 추가
xtrabackup --defaults-file=/etc/my.cnf --compress --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/full --socket=/tmp/mysql.sock

3. stream 추가
xtrabackup --defaults-file=/etc/my.cnf --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/full --socket=/tmp/mysql.sock --stream=tar > backup.tar
xtrabackup --defaults-file=/etc/my.cnf --compress --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/full --socket=/tmp/mysql.sock --stream=xbstream > backup.xb

Incremental Backup (증분백업) Sample

1. Default
xtrabackup --defaults-file=/etc/my.cnf --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/incr --incremental-basedir=/backup/mysql/full --socket=/tmp/mysql.sock

2. compress 추가
xtrabackup --defaults-file=/etc/my.cnf --compress --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/incr --incremental-basedir=/backup/mysql/full --socket=/tmp/mysql.sock

3. stream 추가 (증분백업에서는 tar모드는 안됨)
xtrabackup --defaults-file=/etc/my.cnf --compress --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/mysql/incr --incremental-basedir=/backup/mysql/full --socket=/tmp/mysql.sock --stream=xbstream > incr_backup.xb

실행화면

-- Backup 실행
[root@mysql_test1 full]# xtrabackup --defaults-file=/etc/my.cnf --user=xtra --password='Xtrabackup1!' --backup --target-dir=/backup/test --socket=/tmp/mysql.sock
xtrabackup: recognized server arguments: --server-id=1 --datadir=/var/lib/mysql --innodb_file_per_table=1 --innodb_flush_method=O_DIRECT --innodb_buffer_pool_size=3G --innodb_log_files_in_group=3 --innodb_log_file_size=512M --log_bin=/mydata/binlog/mysql-bin
xtrabackup: recognized client arguments: --user=xtra --password=* --backup=1 --target-dir=/backup/test --socket=/tmp/mysql.sock
230208 12:22:30  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;mysql_socket=/tmp/mysql.sock' as 'xtra'  (using password: YES).
230208 12:22:30  version_check Connected to MySQL server
230208 12:22:30  version_check Executing a version check against the server...
230208 12:22:30  version_check Done.

.
.
.
230208 12:22:34 Executing UNLOCK TABLES
230208 12:22:34 All tables unlocked
230208 12:22:34 [00] Copying ib_buffer_pool to /backup/mysql/full/ib_buffer_pool
230208 12:22:34 [00]        ...done
230208 12:22:34 Backup created in directory '/backup/test/'
MySQL binlog position: filename 'mysql-bin.000091', position '870'
230208 12:22:34 [00] Writing /backup/mysql/full/backup-my.cnf
230208 12:22:34 [00]        ...done
230208 12:22:34 [00] Writing /backup/mysql/full/xtrabackup_info
230208 12:22:34 [00]        ...done
xtrabackup: Transaction log of lsn (3886249) to (3886258) was copied.
230208 12:22:34 completed OK!

2. Backup 파일 확인
[root@mysql_test1 full]# ls -l /backup/mysql/full/
total 43080
-rw-r-----. 1 root root      488 Feb  8 12:22 backup-my.cnf
drwxr-x---. 2 root root       20 Feb  8 12:22 __cdb_recycle_bin__
-rw-r-----. 1 root root      630 Feb  8 12:22 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Feb  8 12:22 ibdata1
drwxr-x---. 2 root root     4096 Feb  8 12:22 mysql
drwxr-x---. 2 root root       20 Feb  8 12:22 mysqld
drwxr-x---. 2 root root     8192 Feb  8 12:22 performance_schema
drwxr-x---. 2 root root     8192 Feb  8 12:22 sys
-rw-r-----. 1 root root 10485760 Feb  8 12:22 undo001
-rw-r-----. 1 root root 10485760 Feb  8 12:22 undo002
-rw-r-----. 1 root root 10485760 Feb  8 12:22 undo003
-rw-r-----. 1 root root       21 Feb  8 12:22 xtrabackup_binlog_info
-rw-r-----. 1 root root      135 Feb  8 12:22 xtrabackup_checkpoints
-rw-r-----. 1 root root      543 Feb  8 12:22 xtrabackup_info
-rw-r-----. 1 root root     2560 Feb  8 12:22 xtrabackup_logfile
[root@mysql_test1 ~]#

3. Backup 정보 확인
[root@mysql_test1 full]# cat xtrabackup_info
uuid = d470cfac-a75f-11ed-8d62-080027b92e5d
.
.
.
binlog_pos = filename 'mysql-bin.000091', position '870'
innodb_from_lsn = 0
innodb_to_lsn = 3886249
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N

[root@mysql_test1 full]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 3886249
last_lsn = 3886258
compact = 0
recover_binlog_info = 0
flushed_lsn = 3886258

백업 실행 후 마지막 줄에 다음과 같은 메세지가 나오면 정상적으로 완료되었다는 뜻입니다.

**xtrabackup: Transaction log of lsn (3886249) to (3886258) was copied.
230208 12:22:34 completed OK!**

6. Restore

백업 파일을 복구하기 전에 DB서비스를 내린 후 기존의 MySQL Data 폴더의 파일을 별도 백업 또는 삭제하고 복구 작업을 진행합니다.

Full Backup 파일 복구

1. xbstream (xbstream으로 백업되어 있을경우)
xbstream -x -C /backup/mysql/restore < backup.xb

2. decompress (압축되어 있을경우)
xtrabackup --decompress --target-dir=/backup/mysql/restore 

3. prepare (복구준비)
xtrabackup --prepare  --target-dir=/backup/mysql/restore 

4. copy-back (Mysql Data 폴더로 복사)
xtrabackup --copy-back --target-dir=/backup/mysql/restore 

5. 권한변경
chown -R mysql:dba *

Incremental Backup 파일 복구

full backup 파일은 먼저

1. Full Backup prepare (복구준비)
xtrabackup --prepare --apply-log-only --target-dir=/backup/mysql/full

2. Incremental Backup prepare (복구준비)
xtrabackup --prepare --incremental-dir='/backup/mysql/incr' --target-dir=/backup/mysql/full

4. copy-back (Mysql Data 폴더로 복사)
xtrabackup --copy-back --target-dir=/backup/mysql/full

5. 권한변경
chown -R mysql:dba *

 

 

mysqldump 백업방법이 궁금하시다면?

 

Mysql / Mariadb Backup Shell Script (sqldump)

안녕하세요 Mysql기반 sqldump를 활용한 DB 백업방법입니다. 해당 스크립트는 각각의 Table별 백업을 파일을 만들어서 관리할 수 있으며 DB List에 들어있는 모든 Table의 리스트를 추출하여 sqldump를 실

m2seo.tistory.com

 

 

반응형

댓글