반응형

xtrabackup 을 사용하면 보통 innobackupex 명령어를 쓰게된다.
근데 최근 MariaDB 를 버전업하면서 백업한 것을 재생성하려는데

ib_logfile0 이 0이라고 복원시 리두로그가 깨지고 DB가 start되지 않는 이슈가 발생했다.

 

확인해보니 MariaDB 10.3부터는 xtrabackup이 아니라 mariabackup이라는 것을 사용해야 한다고 한다.

이것에 대해 알아본다.

 

1. xtrabackup에서 mariabackup으로 변경해야하는 이유

 

xtrabackup 에서 mariadb에서 변경된 redo log를 인식하지 못하기 때문에 mariadbackup을 사용해야 한다.

#참조:  mariadb.com/kb/en/percona-xtrabackup-overview/

 

In MariaDB 10.3, Percona XtraBackup is not supported. See Percona XtraBackup Overview: Compatibility with MariaDB for more information.
In MariaDB 10.2 and MariaDB 10.1, Percona XtraBackup is only partially supported. See Percona XtraBackup Overview: Compatibility with MariaDB for more information.

 

2. Percona XtraBackup과의 차이점

 

• Percona XtraBackup은 InnoDB 리두 로그 파일을 xtrabackup_logfile 파일로 복사하는 반면,

Mariabackup은 ib_logfile0 파일을 사용합니다.

• Percona XtraBackup의 libgcrypt 기반 백업 암호화는 Mariabackup에서 지원되지 않습니다.

• innobackupex 과 같이 innobackupex 에서 mariabackup 로의 심볼릭 링크는 없습니다.

대신 mariabackup 에는 innobackupex 호환 옵션을 활성화하는 --innobackupex 명령 줄 옵션이 있습니다.

• --compact 및 --rebuild_indexes 옵션은 지원되지 않습니다.

• MariaDB 10.1.24의 Mariabackup에서 --stream=tar 에 대한 지원이 제거되었습니다.

• xbstream 유틸리티 이름이 mbstream 으로 변경되었습니다. 그러나 백업을 생성 할 때이 출력 형식을 선택하기 위해 Mariabackup의 --stream 옵션은 여전히 xbstream 값을 예상합니다.
• Mariabackup은 잠금없는 binlog를 지원하지 않습니다.

 

 

3. 이제 xtrabackup은 사용못하나?

 

--innobackupex 옵션을 추가하면 당분간은 사용가능하다.

하지만 10.4부터는 이마저도 지원하지 않는다고 하니 Mariabackup으로 변경하는 게 낫겠다.

 

 

4. Mariabackup 스크립트 변경 및 테스트 (DB 버전 : Mariadb 10.4.15)

 

4-1) Mariabackup

[root@localhost backup]# mariabackup \
 --backup \
 --no-lock \
 --host=127.0.0.1 \
 --port=3306 \
 --user=root \
 --password='비번' \
 --target-dir=/backup/innobackup/20201028_17
 
 //스크립트 종료후 파일확인
 [root@localhost 20201028_17]# ls -lh
drwx------. 2 root root 4.0K 2020-10-28 16:49 TESTDB
-rw-r-----. 1 root root  72K 2020-10-28 16:49 aria_log.00000001
-rw-r-----. 1 root root   52 2020-10-28 16:49 aria_log_control
-rw-r-----. 1 root root  366 2020-10-28 16:49 backup-my.cnf
-rw-r-----. 1 root root  25K 2020-10-28 16:49 ib_buffer_pool
-rw-r-----. 1 root root 215M 2020-10-28 16:49 ib_logfile0 <--- 트렌젝션 데이터 쌓임
-rw-r-----. 1 root root 500M 2020-10-28 16:41 ibdata1
-rw-r-----. 1 root root 500M 2020-10-28 16:41 ibdata2
-rw-r-----. 1 root root 500M 2020-10-28 16:41 ibdata3
-rw-r-----. 1 root root 100M 2020-10-28 16:41 ibdata4
drwx------. 2 root root 4.0K 2020-10-28 16:49 mysql
drwx------. 2 root root 4.0K 2020-10-28 16:49 performance_schema
-rw-r-----. 1 root root   85 2020-10-28 16:49 xtrabackup_checkpoints
-rw-r-----. 1 root root  535 2020-10-28 16:49 xtrabackup_info

 

4-2) redo 로그파일 합치기(=xtrabackup에서는 apply log 적용)

mariabackup \
    --prepare \
	--user=root \
	--password='비번' \
	--target-dir=/backup/innobackup/20201028_17
    
//prepare 로그 확인
mariabackup based on MariaDB server 10.4.15-MariaDB Linux (x86_64)
[00] 2020-10-28 17:00:04 cd to /backup/innobackup/20201028_17/
[00] 2020-10-28 17:00:04 This target seems to be not prepared yet.
[00] 2020-10-28 17:00:04 mariabackup: using the following InnoDB configuration for recovery:
[00] 2020-10-28 17:00:04 innodb_data_home_dir = .
[00] 2020-10-28 17:00:04 innodb_data_file_path = ibdata1:500M;ibdata2:500M;ibdata3:500M;ibdata4:100M:autoextend
[00] 2020-10-28 17:00:04 innodb_log_group_home_dir = .
[00] 2020-10-28 17:00:04 InnoDB: Using Linux native AIO
[00] 2020-10-28 17:00:04 Starting InnoDB instance for recovery.
[00] 2020-10-28 17:00:04 mariabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
2020-10-28 17:00:04 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2020-10-28 17:00:04 0 [Note] InnoDB: Uses event mutexes
2020-10-28 17:00:04 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2020-10-28 17:00:04 0 [Note] InnoDB: Number of pools: 1
2020-10-28 17:00:04 0 [Note] InnoDB: Using SSE2 crc32 instructions
2020-10-28 17:00:04 0 [Note] InnoDB: Initializing buffer pool, total size = 100M, instances = 1, chunk size = 100M
2020-10-28 17:00:04 0 [Note] InnoDB: Completed initialization of buffer pool
2020-10-28 17:00:04 0 [Note] InnoDB: page_cleaner coordinator priority: -20
2020-10-28 17:00:04 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=14172663378
2020-10-28 17:00:12 0 [Note] InnoDB: Starting a batch to recover 1918 pages from redo log. <-- ib_logfile0에서 트랜젝션 파일 읽어서 합치기 작업중
2020-10-28 17:00:14 0 [Note] InnoDB: Starting a batch to recover 2135 pages from redo log.
2020-10-28 17:00:15 0 [Note] InnoDB: Starting a batch to recover 2551 pages from redo log.
2020-10-28 17:00:19 0 [Note] InnoDB: Read redo log up to LSN=14282567680
2020-10-28 17:00:20 0 [Note] InnoDB: Starting a batch to recover 2577 pages from redo log.
2020-10-28 17:00:24 0 [Note] InnoDB: Starting a batch to recover 3005 pages from redo log.
2020-10-28 17:00:28 0 [Note] InnoDB: Starting a batch to recover 3070 pages from redo log.
2020-10-28 17:00:33 0 [Note] InnoDB: Starting final batch to recover 1742 pages from redo log.
[00] 2020-10-28 17:00:33 Last binlog file , position 0
[00] 2020-10-28 17:00:34 completed OK!

//작업후 ib_logfile0 상태 확인
[root@localhost 20201028_17]# ls -lh
drwx------. 2 root root 4.0K 2020-10-28 16:49 TESTDB
-rw-r-----. 1 root root  72K 2020-10-28 16:49 aria_log.00000001
-rw-r-----. 1 root root   52 2020-10-28 16:49 aria_log_control
-rw-r-----. 1 root root  366 2020-10-28 16:49 backup-my.cnf
-rw-r-----. 1 root root  25K 2020-10-28 16:49 ib_buffer_pool
-rw-r-----. 1 root root    0 2020-10-28 17:00 ib_logfile0 <--- 트렌젝션 데이터 merge 끝
-rw-r-----. 1 root root 500M 2020-10-28 17:00 ibdata1
-rw-r-----. 1 root root 500M 2020-10-28 16:41 ibdata2
-rw-r-----. 1 root root 500M 2020-10-28 16:41 ibdata3
-rw-r-----. 1 root root 100M 2020-10-28 16:41 ibdata4
drwx------. 2 root root 4.0K 2020-10-28 16:49 mysql
drwx------. 2 root root 4.0K 2020-10-28 16:49 performance_schema
-rw-r-----. 1 root root   83 2020-10-28 17:00 xtrabackup_checkpoints
-rw-r-----. 1 root root  535 2020-10-28 16:49 xtrabackup_info

백업은 정상적으로 끝난 것을 확인했다. 이제 재생성 테스트를 해본다.

 

 

4-3) restore

#재생성
[mysql@localhost ~]$ service mysqld stop
Shutting down MariaDB..                                    [  OK  ]


[root@localhost dbtest]# mv mariadb_data mariadb_data_bak

[root@localhost dbtest]# mkdir mariadb_data
	
//copy-back or move-back 둘중 아무거나 하면 된다.

mariabackup \
	--move-back \
	--target-dir=/backup/innobackup/20201028_17 \
	--user=root \
	--password='비번' \
	--datadir=/dbtest/mariadb_data
    
// restore 로그
mariabackup based on MariaDB server 10.4.15-MariaDB Linux (x86_64)
[01] 2020-10-28 17:56:29 Moving ibdata1 to /dbtest/mariadb_data/ibdata1
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ibdata2 to /dbtest/mariadb_data/ibdata2
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ibdata3 to /dbtest/mariadb_data/ibdata3
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ibdata4 to /dbtest/mariadb_data/ibdata4
....
[01] 2020-10-28 17:56:29 Moving ./mysql/proc.MAD to /dbtest/mariadb_data/mysql/proc.MAD
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ./mysql/proxies_priv.MAI to /dbtest/mariadb_data/mysql/proxies_priv.MAI
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ./mysql/general_log.CSV to /dbtest/mariadb_data/mysql/general_log.CSV
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ./mysql/func.frm to /dbtest/mariadb_data/mysql/func.frm
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ./mysql/proc.MAI to /dbtest/mariadb_data/mysql/proc.MAI
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ./aria_log_control to /dbtest/mariadb_data/aria_log_control
[01] 2020-10-28 17:56:29         ...done
[01] 2020-10-28 17:56:29 Moving ./xtrabackup_info to /dbtest/mariadb_data/xtrabackup_info
[01] 2020-10-28 17:56:29         ...done
[00] 2020-10-28 17:56:29 completed OK!

// 파일확인 -> ib_logfile0 은 사라졌다.
[root@localhost mariadb_data]# ls -lh
drwx------. 2 root root 4.0K 2020-10-28 17:56 TESTDB
-rw-r-----. 1 root root  72K 2020-10-28 17:47 aria_log.00000001
-rw-r-----. 1 root root   52 2020-10-28 17:47 aria_log_control
-rw-r-----. 1 root root 1.1M 2020-10-28 17:47 ib_buffer_pool
-rw-r-----. 1 root root 500M 2020-10-28 17:51 ibdata1
-rw-r-----. 1 root root 500M 2020-10-28 17:39 ibdata2
-rw-r-----. 1 root root 500M 2020-10-28 17:39 ibdata3
-rw-r-----. 1 root root 100M 2020-10-28 17:39 ibdata4
drwx------. 2 root root 4.0K 2020-10-28 17:56 mysql
drwx------. 2 root root 4.0K 2020-10-28 17:56 performance_schema
-rw-r-----. 1 root root  535 2020-10-28 17:47 xtrabackup_info

[root@localhost mariadb_data]# chown -Rf mysql:mysql /dbtest/mariadb_data

[mysql@localhost ~]$ service mysqld start


재생성 제대로 되는 것을 확인했다.... mariabackup으로 쉘스크립트 수정하고 반영준비한다.

끝~

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,