mariabackup 백업 복구

싱하·2023년 6월 22일
0

mariadb

목록 보기
8/8
post-thumbnail

DB의 백업은 크게 물리적 논리적 백업으로 나뉜다.
물리적 백업 : 백업은 copy, 복원은 paste라고 생각하면 쉽다
논리적 백업 : 데이터를 1개의 sql로 dump뜨는 것
-->복구 방식도 두개가 다르다.

이번 포스트는 저번에 dump백업을 설명했기때문에 mariabackup. 즉, 물리 백업을 설명하고자 한다.


장점

  • mysqldump보다는 백업&복원에서 확연히 차이나는 속도
  • 증분 백업이 가능

단점

  • 복원할 때 downtime을 가져야함
  • table, database만 복구가 불가능

실습

전체 백업

전체 백업
$ mariabackup --backup --target-dir=/backup/full --user=root --password=root

이게 기본 명령어

  • 백업 경로는 모두가 다름

    backup 옵션

    • --no-lock : backup동안 테이블 lock이 걸리지않게 함.
    • --backup : 기본 백업 명령어
    • --target-dir : 백업받을 경로
    • --defaults-file : 옵션 파일 지정 ex) /etc/my.cnf

증분 백업

증분 백업
$ mariabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full --user=root --password=root

--incremental-basedir : LSN을 확인하는 기능이라고 보면 됨.
ex) 증분이 처음인 경우 -> full백업경로, 두번째는 첫번째경로지정

옵션은 전체 백업 할때와 같이 적용가능하다.

  • 백업할 때, --no-lock은 24/365 운영DB인 경우에 필수라고 생각
    * Lock발생 = 장애...(DBA는 장애나면 die)

백업 데이터의 checkpoint 확인

예시) full backup checkpoint

$ vi xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 10000
last_lsn = 10010

예시) incremental checkpoint

$ vi xtrabackup_checkpoints
backup_type = incremental
from_lsn = 10000 (full checkpoint의 to_lsn과 같음)
to_lsn = 20000
last_lsn = 20012

복원 준비

$ mariabackup --prepare --target-dir=/backup/full
----full backup만 있는 경우는 위에 명령어만 치면 끝----
$ mariabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc1
$ mariabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2
----증분 있는 만큼 추가----

복원 실행

$ systemctl stop mariadb.service -> mariadb 잠시 중단

$ rm -r -f /data/*  -> /data경로 모든 것 삭제

$ mariabackup --copy-back --target-dir=/backup/full  -> fullbackup dir

$ chown -R mysql:mysql /data -> root로 실행이 되어 mysql 권한으로 변경

$ systemctl start mariadb.service
  • 복구를 했지만 백업받은 시점과 차이가 있으므로 binlog를 통하여 시점복구를 실행

binlog 시점복구

마지막 incremental이나 full의 xtrabackup_binlog_info를 보면
mariadb-bin.000004 52341 0-1-24
해석 : mariabackup을 통한 복구가 binlog 4의 lsn 52341까지만 복구 완료

  1. binlog를 sql로 바꿔서 복구
$ mysqlbinlog mariadb-bin.000004 --start-position=52341 > 000004.sql
$ mysqlbinlog mariadb-bin.000005 > 000005.sql
$ mysql -uroot -p < 000004.sql
$ mysql -uroot -p < 000005.sql
  1. sql변환없이 바로 시점복구
$ mysqlbinlog --start-position=52341 mariadb-bin.000004 | mysql -uroot -p
$ mysqlbinlog mariadb-bin.000005 | mysql -uroot -p

mysqlbinlog 옵션

--start-position=N
읽기 시작 지점의 포지션을 지정 N보다 크거나 같은 포지션 값의 첫 번째 이벤트부터 바이너리 로그를 읽기 시작한다.
--stop-position=N
마지막 시점의 포지션을 지정한다. N보다 크거나 같은 포지션 값의 첫 번째 이벤트에서 바이너리 로그 읽기를 중단한다.
--start-datetime=datetime
지정한 datetime 보다 크거나 같은 타임스탬프 값의 첫 번째 이벤트부터 바이너리 로그를 읽기 시작한다.
--stop-datetime=datetime
지정한 datetime 보다 크거나 같은 타임스탬프 값의 첫 번째 이벤트에서 바이너리 로그 읽기를 중단한다.


이렇게 진행하면 최종 시점복원까지 완료가 되어 다시 서비스를 운영하면 된다.
이상 mariabackup에 대해 끄적여봤습니다.
감사합니다.

#### 그리고 무엇보다 모든 명령어를 칠때 한번 더 확인하고 실행!

profile
DBDBDEEP

0개의 댓글