(1) xtrabackup 구성

① 설치 환경

  OS : Rocky Linux release 8.10 64bit

  xtrabackup : 8.0.35-32

  MySQL : MySQL 8.0.41 Community Server (GPLv2)

  MySQL basedir : /home/dba/db/mysql

  MySQL datadir : /home/dba/db/mysql/data

  MySQL my.cnf dir : /home/dba/db/mysql/my.cnf

  MySQL sock dir : /home/dba/db/mysql/tmp/mysql.sock

  xtrabackup basedir : /home/dba/xtrabackup

  backup dir : /home/dba/backup

② xtrabackup Download

공식 다운로드 URL https://www.percona.com/downloads

shell> wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-32/binary/tarball/percona-xtrabackup-8.0.35-32-Linux-x86_64.glibc2.28-minimal.tar.gz

③ xtrabackup 압축풀기 및 이름변경

shell> tar xvfz percona-xtrabackup-8.0.35-32-Linux-x86_64.glibc2.28-minimal.tar.gz -C /home/dba/

shell> cd /home/dba

shell> mv percona-xtrabackup-8.0.35-32-Linux-x86_64.glibc2.28-minimal xtrabackup

④ zstd 라이브러리 설치 (압축백업 해제 용도 이며 MySQL 5.7 은 qpress 설치 필요)

 shell> dnf install zstd

⑤ backup dir 생성 및 backup script 작성

shell> mkdir /home/dba/backup

shell> vi /home/dba/xtrabackup/mysqlbackup.sh

#!/bin/sh

today="`date '+%Y%m%d'`"
_xtrabackup_basedir="/home/dba/xtrabackup"
_my_cnf_dir="/home/dba/db/mysql"
_socket_dir="/home/dba/db/mysql/tmp"
_mysql_root_passwd="0909"
_backup_dir="/home/dba/backup"

$_xtrabackup_basedir/bin/xtrabackup \
--defaults-file=$_my_cnf_dir/my.cnf \
--user=root \
--password=$_mysql_root_passwd \
--host=localhost \
--socket=$_socket_dir/mysql.sock \
--ftwrl-wait-threshold=40 \
--ftwrl-wait-query-type=all \
--ftwrl-wait-timeout=180 \
--kill-long-queries-timeout=20 \
--kill-long-query-type=all \
--compress \
--backup \
--target-dir=$_backup_dir/$today

⑥ 압축백업 실행

 shell> /home/dba/xtrabackup/mysqlbackup.sh

 2025-02-16T19:01:30.602676+09:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments

                           중간생략

 [Note] [MY-011825] [Xtrabackup] MySQL binlog position: filename 'mysql-bin.000013', position '157'

 [Note] [MY-011825] [Xtrabackup] Compressing /home/dba/backup/20250216/backup-my.cnf.zst

 [Note] [MY-011825] [Xtrabackup] Done: Compressing file /home/dba/backup/20250216/backup-my.cnf.zst

 [Note] [MY-011825] [Xtrabackup] Compressing /home/dba/backup/20250216/xtrabackup_info.zst

 [Note] [MY-011825] [Xtrabackup] Done: Compressing file /home/dba/backup/20250216/xtrabackup_info.zst

 [Note] [MY-011825] [Xtrabackup] Transaction log of lsn (6513804980) to (6513805018) was copied.

 [Note] [MY-011825] [Xtrabackup] completed OK!

⑦ mysqlbackup.sh crontab 등록

00 01 * * * /home/dba/xtrabackup/mysqlbackup.sh > /home/dba/backup/$(date +\%Y\%m\%d).log 2>&1

(2)  복원

① 압축 해제

/home/dba/xtrabackup/bin/xtrabackup --decompress --target-dir=/home/dba/backup/20250216

② prepare

/home/dba/xtrabackup/bin/xtrabackup --prepare --target-dir=/home/dba/backup/20250216

③ create new data dir

/home/dba/xtrabackup/bin/xtrabackup --move-back --target-dir=/home/dba/backup/20250216 --datadir=/home/dba/db/mysql/new_data

④ 생성된 new_data dir로 변경하기

 ⓐ MySQL 데몬 stop

shell> /home/dba/db/mysql/bin/mysqladmin -uroot -p --socket=/path/mysql.sock shutdown

 ⓑ data dir 변경

   shell> cd /home/dba/db/mysql

   shell> mv data data_ori

   shell> mv new_data data

   note) new_data 디렉토리 및 하위 데이터파일의 소유권이 기존 데이터와 동일해야 합니다

 ⓒ MySQL 데몬 start

shell> /home/dba/db/mysql/bin/mysqld_safe --defaults-file=/path/my.cnf --user=dba &


(3)  시점복원

① 백업 파일의 포지션 정보 확인

  shell> vi /mysql_data_dir/xtrabackup_binlog_info

  mysql-bin.000013         157

note) 백업파일로 복원 한 데이터는 mysql-bin.000013 파일의 157 시점 부터 복원 되지 않았다는 것을 의미합니다.

시점 복원은 binlog (binary log) 를 이용하여 복원합니다.

시점복원 가이드

https://www.mysqlkorea.com/?depth=0705

https://www.mysqlkorea.com/?depth=070502

 

NOTE) 마치며...

데이터 손실 데이터베이스 손상, 하드웨어 또는 운영 체제 충돌 또는 자연 재해에 대처하기 위해 데이터베이스 복구를 위한

정교한 백업 계획의 구현은 데이터베이스 관리자의 가장 중요한 업무 입니다.

적절한 백업 및 복구 전략 실행 계획이 무척 중요합니다.

비상 사태의 경우에 의지 할 수 있는 것은 백업 이외에 아무것도 없습니다.

따라서 데이터베이스 관리자는 모든 데이터베이스를 정기적으로 백업하고 신속한 복구를 위해 백업스케쥴 구성을 꼭 해야 합니다.