DB의 백업은 크게 물리적 논리적 백업으로 나뉜다.
물리적 백업 : 백업은 copy, 복원은 paste라고 생각하면 쉽다
논리적 백업 : 데이터를 1개의 sql로 dump뜨는 것
-->복구 방식도 두개가 다르다.
이번 포스트는 저번에 dump백업을 설명했기때문에 mariabackup. 즉, 물리 백업을 설명하고자 한다.
전체 백업
$ 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백업경로, 두번째는 첫번째경로지정
옵션은 전체 백업 할때와 같이 적용가능하다.
백업 데이터의 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
마지막 incremental이나 full의 xtrabackup_binlog_info를 보면
mariadb-bin.000004 52341 0-1-24
해석 : mariabackup을 통한 복구가 binlog 4의 lsn 52341까지만 복구 완료
$ 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
$ 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에 대해 끄적여봤습니다.
감사합니다.
#### 그리고 무엇보다 모든 명령어를 칠때 한번 더 확인하고 실행!