(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
③ xtrabackup 압축풀기 및 이름변경
shell> cd /home/dba
shell> mv percona-xtrabackup-8.0.35-32-Linux-x86_64.glibc2.28-minimal xtrabackup
④ zstd 라이브러리 설치 (압축백업 해제 용도 이며 MySQL 5.7 은 qpress 설치 필요)
⑤ 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 등록
(2) 복원
① 압축 해제
② prepare
③ create new data dir
④ 생성된 new_data dir로 변경하기
ⓐ MySQL 데몬 stop
ⓑ data dir 변경
shell> cd /home/dba/db/mysql
shell> mv data data_ori
shell> mv new_data data
note) new_data 디렉토리 및 하위 데이터파일의 소유권이 기존 데이터와 동일해야 합니다
ⓒ MySQL 데몬 start
(3) 시점복원
① 백업 파일의 포지션 정보 확인
shell> vi /mysql_data_dir/xtrabackup_binlog_info
mysql-bin.000013 157
note) 백업파일로 복원 한 데이터는 mysql-bin.000013 파일의 157 시점 부터 복원 되지 않았다는 것을 의미합니다.
시점 복원은 binlog (binary log) 를 이용하여 복원합니다.
NOTE) 마치며...
데이터 손실 데이터베이스 손상, 하드웨어 또는 운영 체제 충돌 또는 자연 재해에 대처하기 위해 데이터베이스 복구를 위한
정교한 백업 계획의 구현은 데이터베이스 관리자의 가장 중요한 업무 입니다.
적절한 백업 및 복구 전략 실행 계획이 무척 중요합니다.
비상 사태의 경우에 의지 할 수 있는 것은 백업 이외에 아무것도 없습니다.
따라서 데이터베이스 관리자는 모든 데이터베이스를 정기적으로 백업하고 신속한 복구를 위해 백업스케쥴 구성을 꼭 해야 합니다.