티스토리 뷰

1. MariaBackup 준비

MariaBackup을 수행하기 위해서는 계정을 생성해줘야 한다.

Daniel~> mysql -uroot -p mysql
mysql> CREATE USER 'mariabackup'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, BINLOG MONITOR, REPLICATION CLIENT ON *.* TO 'mariabackup'@'localhost';
mysql> GRANT CREATE, INSERT ON PERCONA_SCHEMA.* TO 'mariabackup'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

2. 데이터베이스 서버 백업

증분 백업을 수행하려면 먼저 전체 백업 을 수행해야합니다 . 데이터베이스를 백업하려면 --backup 옵션을 사용하여 Mariabackup 을 실행하여 백업을 수행하고 --target-dir 옵션을 사용하여 백업 파일을 배치 할 위치를 지정해야합니다. 전체 백업을 수행 할 때 대상 디렉토리가 비어 있거나 존재하지 않아야합니다.

# Mariadb Full Backup
$ mariabackup --backup \
   --history \
   --no-lock \
   --user=mariabackup \
   --password='password' \
   --databases='database' \
   --target-dir=/data/db-backup/mariadb_local_backup/

위 명령은 모든 database 를 백업받습니다.

--history 옵션을 사용하면 백업기록을 남길수 있습니다.

--databases 옵션을 사용하여 database 를 지정할 수도 있습니다.

--host 옵션을 사용하여 원격에서도 백업이 가능합니다.

--no-lock 옵션으로 사용하여 서비스중인 사용 테이블이 백업으로 인해 잠기는 것을 막기 위한 옵션입니다.

--target-dir 에 생성되는 xtrabackup_checkpoints 파일에서 LSN 정보를 확인할 수 습니다.

backup_type = full-backuped
from_lsn = 0
to_lsn = 1635102
last_lsn = 1635102
recover_binlog_info = 0

압축 백업

# 압축백업
mariabackup --backup \
   --history \
   --no-lock \
   --user=mariabackup \
   --password='password' \
   --databases='infaceone' \
   --stream=xbstream | gzip > /data/backup_$(date +"%Y%m%d%H%M%S").gz
   
# 압축해제
gunzip -c backup_date.gz | mbstream -x

3. 증분백업

증분 백업은 Full Backup이 이뤄진후 진행해야 합니다.

증분 백업을 수행하려면 --backup 옵션을 사용하여 Mariabackup 을 실행하여 백업을 수행하도록 지시하고 --target-dir 옵션을 사용하여 증분 변경을 배치 할 위치를 지정해야합니다. 대상 디렉토리는 비어 있어야합니다. --incremental-basedir 옵션 과 함께 실행하여 위에서 수행 한 전체 백업의 경로를 알려 주어야 합니다. 예를 들면 다음과 같습니다.

$ mariabackup --backup \
   --target-dir=/var/mariadb/inc1/ \
   --incremental-basedir=/var/mariadb/backup/ \
   --user=mariabackup --password=mypassword \
   --no-lock

이 명령은 /var/mariadb/inc1 에 증분 변경 사항을 저장하는 일련의 델타 파일을 작성합니다 . 업데이트 된 LSN 값을 사용하여이 디렉토리에서 유사한 xtrabackup_checkpoints 파일을 찾을 수 있습니다 .

backup_type = full-backuped
from_lsn = 1635102
to_lsn = 1635114
last_lsn = 1635114
recover_binlog_info = 0

추가 증분 백업을 수행하기 위해 이전 증분 백업의 대상 디렉토리를 다음 증분 백업의 증분 기본 디렉토리로 사용할 수 있습니다.

incremental backup 을 수행할 때는 --incremental-basedir 에 바로 직전의 incremental backup

의 위치를 지정합니다.

$ mariabackup --backup \
   --target-dir=/var/mariadb/inc2/ \
   --incremental-basedir=/var/mariadb/inc1/ \
   --user=mariabackup --password=mypassword
   --no-lock

incremental backup 을 수행할 때마다 디렉토리를 새로 만들어주는 방식.

 

4. 복원준비

/var/mariadb 에 세 개의 백업 이 있습니다. 첫 번째는 전체 백업이고 다른 하나는이 첫 번째 백업에서 증가합니다. 데이터베이스에 백업을 복원하려면 먼저 증분 백업을 기본 전체 백업에 적용해야합니다. --prepare 명령 옵션을 사용하여 수행됩니다 .

$ mariabackup --prepare \
   --target-dir=/var/mariadb/backup

이 명령을 실행하면 기본 전체 백업, 즉 /var/mariadb/backup 이 백업을 수행하는 동안 수집 된 InnoDB 리두 로그에 포함 된 변경 내용과 동기화됩니다 

그런 다음 증분 변경 사항을 기본 전체 백업에 적용하여야 합니다.

$ mariabackup --prepare \
   --target-dir=/var/mariadb/backup \
   --incremental-dir=/var/mariadb/inc1

처음 증분 백업(inc1)을 full backup 과 동기화하고, 다음 증분 백업(inc2)을 적용하려면 

위 명령에서 --incremental-dir 의 위치만 변경하여 동일하게 수행하면 된다.

5. 복원

모든 증분 백업을 기본에 적용했으면 --copy-back 또는 --move-back 옵션을 사용하여 백업을 복원할 수 있습니다. --copy-back 옵션을 사용하면 원래 백업 파일을 보관할 수 있습니다. --move-back 옵션은 실제로 백업 파일을 데이터 디렉토리로 이동하므로 원래 백업 파일이 손실됩니다.

 

복원 준비 사항

1. Mariadb 서비스 종료

2. datadir이 비어 있는지 확인

3. 복원수행

$ systemctl stop mariadb
$ mariabackup --copy-back \
   --target-dir=/var/mariadb/backup/

Mariabackup은 데이터베이스를 복원 할 때 백업의 파일 및 디렉토리 권한을 유지합니다. 

그러나 데이터베이스를 복원하는 사용자 및 그룹으로 파일을 디스크에 씁니다. 

따라서 백업을 복원 한 후 MariaDB 서버의 사용자 및 그룹 (일반적으로 둘 다의 mysql ) 과 일치하도록 

데이터 디렉토리의 소유자를 조정해야 할 수도 있습니다 . 

예를 들어, 파일 소유권을 mysql 사용자 및 그룹 으로 재귀 적으로 변경하려면 다음을 실행할 수 있습니다.

$ chown -R mysql:mysql /data/db-data

위 과정이 끝나면 Mariadb 서비스를 시작합니다.

$ systemctl start mariadb

6. Error

full backup 위치와 incremental backup 의 위치가 같을 경우 발생하는 에러

mariabackup: Can't create/write to file '/home/mysql/phy/ib_logfile0' (Errcode: 17 "File exists")
[00] 2019-12-24 18:39:37 Error: failed to open the target stream for 'ib_logfile0'.

복원후 Mariadb 시작시 발생하는 에러

 [ERROR] Found 1 prepared transactions! 
 It means that mysqld was not shut down properly last time and critical 
 recovery information (last binlog or tc.log file) was manually deleted after a crash. 
 You have to start mysqld with --tc-heuristic-recover switch to 
 commit or rollback pending transactions.
 
 root@daniel# service mysql start --tc-heuristic-recover=0
 root@daniel# service mysql stop
 root@daniel# service mysql start
 
 위 해결 방법으로 안되는 경우 아래와 같이 한다.
 
root@daniel# mysqld --tc-heuristic-recover=ROLLBACK

Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
my.cnf 에 user=mysql 추가로 해결


root@daniel# systectl start mariadb

2022-11-07  3:30:59 0 [Note] InnoDB: Cannot open '/var/lib/mariadb/ib_buffer_pool' for reading: Permission denied
2022-11-07  3:30:59 0 [ERROR] mariadbd: File '/var/lib/mariadb/binlog/mariadb-bin.000004' not found (Errcode: 13 "Permission denied")
2022-11-07  3:30:59 0 [ERROR] Failed to open log (file '/var/lib/mariadb/binlog/mariadb-bin.000004', errno 13)
2022-11-07  3:30:59 0 [ERROR] Could not open log file
2022-11-07  3:30:59 0 [ERROR] Can't init tc log
2022-11-07  3:30:59 0 [ERROR] Aborting
2022-11-07  3:31:10 0 [Warning] The parameter innodb_buffer_pool_instances is deprecated and has no effect.

오류 발생시 
root@daniel# chown -r mysql:mysql /var/lib/mariadb/binlog
 
 정상적으로 Mariadb 실행
root@daniel# systectl start mariadb

 

 

7. 증분 백업 스크립트

 

 

 

 

'DATABASE > Mysql&MariaDB' 카테고리의 다른 글

MariaDB 10.5 설치  (0) 2021.02.10
8Core 16Thread 32Gbyte my.cnf 설정  (0) 2021.02.04
Mariabackup  (0) 2020.01.15
Mariadb Table 복사  (0) 2019.09.25
Myslq 함수 정리  (0) 2018.09.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함