티스토리 뷰
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
- letsencrypt
- 마이바티스CamelCase
- Letsencrypt wildcard auto renew
- camelcase
- Letsencrypt wildcard
- SSL
- Letsencrypt+nginx
- 마이바티스
- Intellj들여쓰기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |