본문 바로가기

카테고리 없음

MySQL ibbackup v1.0

MySQL ibbackup

 

from MySQL Enterprise Backup | http://www.innodb.com/products/hot-backup/

 

1.    ibbackup

ibbackup innodb 사에서 만든 InnoDB용 백업 프로그램이며 InnoDB Hot Backup 에서 MySQL Enterprise Backup 으로 이름이 변경되었다.

특징으로는 MySQL Process 에 영향 없이 Hot Backup 이 가능하다.

*유료 프로그램으로 따로 구매해야 한다.*

 

ibbackup 을 사용해 생성한 파일에는 추가적으로 Recover 작업이 필요하다. MySQL 에서 일어나는 작업과 상관없이 파일을 복제하기 때문에 생성된 파일과 파일은 데이터의 시간이 일관되지 않는다. 이를 맞춰주기 위한 작업으로 Recover 를 실시한다.

 

2.    ibbackup 구문

ibbackup my.cnf backup-my.cnf

위에서 이야기한 cnf 파일은 mysql 기동시 사용하는 configuration file 을 말함이다.

사용구문은 위와 같으며 ibbackup my1.cnf, my2.cnf 사용하는 파라미터는 다음과 같다.

 

datadir

innodb_data_home_dir

innodb_data_file_path

innodb_log_group_home_dir

innodb_log_files_in_group

innodb_log_file_size

 

참고로 file path 는 절대경로여야 한다.

 

3.    ibbackup 도움말

#ibbackup --help 로 도움말을 조회할 수 있다.

 

Usage:

ibbackup [--sleep ms] [--suspend-at-end] [--compress [level]]

         [--include regexp] my.cnf backup-my.cnf

or

ibbackup --apply-log [--use-memory mb] [--uncompress] backup-my.cnf

or

ibbackup --restore [--use-memory mb] [--uncompress] backup-my.cnf

 

--apply-log : 백업본에 log records 를 적용하고 backup-my.cnf 에 정의된 경로에 새로운 log file 을 생성한다.

 

--include regexp : regexp 에 정의된 per-table data files 만을 포함한다. reg_exp db_name.table_name 이 들어간다. regular expression POSIX 1003.2 “extended form” 을 따른다. 실행예로 ‘sales.den.* sales database den 으로 시작하는 테이블을 의미한다. (\ 는 메타문자를 비활성화 하는 기호이다.)

 

--sleep ms : 데이터 1메가 copy 때마다 지정한 miliseconds 만큼 sleep 한다. 백업을 진행하는 장비의 I/O 부하를 조정하기 위해 사용한다. default 값은 0 이다.

 

--suspend-at-end : 이 옵션을 사용하면 백업이 완료되는 시점에 backup-my.cnf 에 정의한 log group home dir ibbackup-suspended 라는 파일을 생성하고 대기하게 된다. 이 파일을 삭제해야 백업이 완료된다. 이 옵션은 ibbackup 완료 시점에 MyISAM 테이블을 lock / back-up 하기위해 사용한다. 이 방법을 통해 InnoDB MyISAM 테이블의 일관성 있는 스냅샷을 얻을 수 있다.

 

--use-memory mb : --apply-log 를 사용할 때만 유효하다. 이는 ibbackup recovery 에 정의한 mb 만큼 메모리를 사용할 수 있다는 뜻이다. default 값은 100M 이다.

 

--compress : 압축된 백업본을 만들 때 사용한다. 파일이름.ibz 로 만들어진다. 압축레벨도 선택적으로 사용할 수 있다(0-9).  1은 가장 빠른 압축이고 9는 가장높은 압축률을 보여준다. default level 1이다.

 

--uncompress : 압축된 백업본에 대해 --apply-log 를 사용할 때 같이 사용되는 옵션이다.

백업 프로그램은 테이블의 .frm 에 대해 백업하지 않는다. MyISAM 테이블에 대해 백업하지 않는다. 때문에 완전한 백업본을 위해 별도로 백업전 / 백업후의 .frm 을 복사해야 한다. .frm copy 하는 동안(위에 언급한 두개) 생성된 binary log 도 마찬가지로 백업해야 한다. 이는

 

mysqldump -l -d yourdatabasename

 

를 통해 백업할 수 있다. binlog 를 통해 두개의 .frm 카피본사이 (ibbackup 이 진행되는 기간) 에 일어난 변화를 확인할 수 있다.

 

4.    ibbackup 예제

my.cnf backup-my.cnf 둘다 아래의 내용을 포함하고 있다. (file path 만 다르다.)

 

datadir=/home/mysql/mysql/data

innodb_data_home_dir = /home/mysql/mysql/data

innodb_data_file_path = ibdata1:18M

innodb_log_group_home_dir = /home/mysql/mysql/data

innodb_log_file_size = 5M

innodb_log_files_in_group=2

 

위 내용은 my.cnf 내용이며 backup-my.cnf 에는 ./data 가 아니라 ./data2 를 사용하였다.

 

<compress 사용 안하는 경우>

 

oracle32@/home/mysql/mysql/bin>./ibbackup /home/mysql/mysql/conf/my.cnf /home/mysql/mysql/conf/my2.cnf

 

~ (라이선스 정보)~

 

Type ibbackup --license for detailed license terms, --help for help

 

Contents of /home/mysql/mysql/conf/my.cnf:

innodb_data_home_dir got value /home/mysql/mysql/data

innodb_data_file_path got value ibdata1:18M

datadir got value /home/mysql/mysql/data

innodb_log_group_home_dir got value /home/mysql/mysql/data

innodb_log_files_in_group got value 2

innodb_log_file_size got value 5242880

 

Contents of /home/mysql/mysql/conf/my2.cnf:

innodb_data_home_dir got value /home/mysql/mysql/data2

innodb_data_file_path got value ibdata1:18M

datadir got value /home/mysql/mysql/data2

innodb_log_group_home_dir got value /home/mysql/mysql/data2

innodb_log_files_in_group got value 2

innodb_log_file_size got value 5242880

 

ibbackup: Found checkpoint at lsn 0 1597395

ibbackup: Starting log scan from lsn 0 1596928

110125 11:35:09  ibbackup: Copying log...

110125 11:35:09  ibbackup: Log copied, lsn 0 1597395

ibbackup: We wait 1 second before starting copying the data files...

110125 11:35:10  ibbackup: Copying /home/mysql/mysql/data/ibdata1

ibbackup: A copied database page was modified at 0 1597395

ibbackup: Scanned log up to lsn 0 1597395

ibbackup: Was able to parse the log up to lsn 0 1597395

ibbackup: Maximum page number for a log record 0

110125 11:35:11  ibbackup: Full backup completed!

 

위 텍스트를 보면 ibbackup 인자로 사용한 configuration file 의 어떤 파라미터를 사용하였는지 (파란색 파라미터) 그 내용을 확인할 수 있다. 사용되는 파라미터는 문두에 이야기 한 6개 파라미터 임을 확인할 수 있엇다.

 

백업을 완료한 후 data2 디렉토리에는 다음과 같은 파일들이 있다.

 

oracle32@/home/mysql/mysql/data2>ls -la

total 18468

drwxr-xr-x  2 mysql mysql     4096 Jan 25 11:35 .

drwxr-xr-x 15 mysql mysql     4096 Jan 24 18:47 ..

-rw-r-----  1 mysql mysql     1024 Jan 25 11:35 ibbackup_logfile

-rw-r-----  1 mysql mysql 18874368 Jan 25 11:35 ibdata1

 

위 백업본은 Recovery 가 적용되지 않은 미완성본이다. 데이터 파일에 백업받은 로그파일을 적용해야 한다.

 

oracle32@/home/mysql/mysql/bin>./ibbackup --apply-log /home/mysql/mysql/conf/my2.cnf

~ (라이선스 정보)~

 

Type ibbackup --license for detailed license terms, --help for help

 

Contents of /home/mysql/mysql/conf/my2.cnf:

innodb_data_home_dir got value /home/mysql/mysql/data2

innodb_data_file_path got value ibdata1:18M

datadir got value /home/mysql/mysql/data2

innodb_log_group_home_dir got value /home/mysql/mysql/data2

innodb_log_files_in_group got value 2

innodb_log_file_size got value 5242880

 

110125 12:45:10  ibbackup: ibbackup_logfile's creation parameters:

ibbackup: start lsn 0 1596928, end lsn 0 1597395,

ibbackup: start checkpoint 0 1597395

InnoDB: Doing recovery: scanned up to log sequence number 0 1597395

InnoDB: Starting an apply batch of log records to the database...

InnoDB: Progress in percents: 0 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 Setting log file size to 0 5242880

Setting log file size to 0 5242880

ibbackup: We were able to parse ibbackup_logfile up to

ibbackup: lsn 0 1597395

ibbackup: The first data file is '/home/mysql/mysql/data2/ibdata1'

ibbackup: and the new created log files are at '/home/mysql/mysql/data2/'

110125 12:45:10  ibbackup: Full backup prepared for recovery successfully!

 

log 적용을 완료 후 data2 폴더를 다시 확인하였다.

 

oracle32@/home/mysql/mysql/data2>ls -la

total 28732

drwxr-xr-x  2 mysql mysql     4096 Jan 25 12:45 .

drwxr-xr-x 15 mysql mysql     4096 Jan 24 18:47 ..

-rw-r-----  1 mysql mysql     1024 Jan 25 11:35 ibbackup_logfile

-rw-r-----  1 mysql mysql 18874368 Jan 25 11:35 ibdata1

-rw-r-----  1 mysql mysql  5242880 Jan 25 12:45 ib_logfile0

-rw-r-----  1 mysql mysql  5242880 Jan 25 12:45 ib_logfile1

 

적용결과로 ib_logfile0, 1 이라는 파일이 추가 생성되었다.  소스가 되었던 파일은 수정된

시각을 보았을 때 변경사항이 없는 것을 알 수 있다.

 

<compress 사용하는 경우>

compress 를 사용하는 경우 사용하지 않는 경우의 명령어에 --compress 를 추가하면 된다.

 

oracle32@/home/mysql/mysql/bin>./ibbackup --compress /home/mysql/mysql/conf/my.cnf /home/mysql/mysql/conf/my2.cnf

 

~((중략))~

 

ibbackup: Found checkpoint at lsn 0 1597395

ibbackup: Starting log scan from lsn 0 1596928

110125 12:56:24  ibbackup: Copying log...

110125 12:56:24  ibbackup: Log copied, lsn 0 1597395

ibbackup: We wait 1 second before starting copying the data files...

110125 12:56:25  ibbackup: Copying /home/mysql/mysql/data/ibdata1

ibbackup: A copied database page was modified at 0 1597395

ibbackup: Scanned log up to lsn 0 1597395

ibbackup: Was able to parse the log up to lsn 0 1597395

ibbackup: Maximum page number for a log record 0

 

ibbackup: Compressed 18 MB of data files to 97 kbytes (compression 99%).

 

110125 12:56:25  ibbackup: Full backup completed!

 

data2 를 이동하여 생성된 파일을 확인하였다.

 

oracle32@/home/mysql/mysql/data2>ls -la

total 116

drwxr-xr-x  2 mysql mysql  4096 Jan 25 12:56 .

drwxr-xr-x 15 mysql mysql  4096 Jan 24 18:47 ..

-rw-r-----  1 mysql mysql  1024 Jan 25 12:56 ibbackup_logfile

-rw-r-----  1 mysql mysql 99228 Jan 25 12:56 ibdata1.ibz

 

compress 하지 않은 연결과 백업본과 비교했을 때 크기 변화는 18M -> 99k 로 줄었다.

또 파일명 끝에 접미어로 .ibz 가 붙었음을 알 수 있다.

압축하지 않은 백업본의 경우와 마찬가지로 위 백업본에도 Recovery 를 적용해야 한다.

이 경우 --apply-log 와 함께 --uncompress 를 사용한다.

 

oracle32@/home/mysql/mysql/bin>./ibbackup --apply-log --uncompress /home/mysql/mysql/conf/my2.cnf

 

~((중략))~

 

ibbackup: Uncompressing data file '/home/mysql/mysql/data2/ibdata1.ibz'

110125 13:09:37  ibbackup: ibbackup_logfile's creation parameters:

ibbackup: start lsn 0 1596928, end lsn 0 1597395,

ibbackup: start checkpoint 0 1597395

InnoDB: Doing recovery: scanned up to log sequence number 0 1597395

InnoDB: Starting an apply batch of log records to the database...

InnoDB: Progress in percents: 0 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 Setting log file size to 0 5242880

Setting log file size to 0 5242880

ibbackup: We were able to parse ibbackup_logfile up to

ibbackup: lsn 0 1597395

ibbackup: The first data file is '/home/mysql/mysql/data2/ibdata1'

ibbackup: and the new created log files are at '/home/mysql/mysql/data2/'

110125 13:09:38  ibbackup: Full backup prepared for recovery successfully!

 

 

위 메시지를 보면 압축본을 압축해제 후 적용하는 것을 알 수 있다. 백업 완료본은 다음과 같다.

 

oracle32@/home/mysql/mysql/data2>ls -la

total 28836

drwxr-xr-x  2 mysql mysql     4096 Jan 25 13:09 .

drwxr-xr-x 15 mysql mysql     4096 Jan 24 18:47 ..

-rw-r-----  1 mysql mysql     1024 Jan 25 12:56 ibbackup_logfile

-rw-r-----  1 mysql mysql 18874368 Jan 25 13:09 ibdata1

-rw-r-----  1 mysql mysql    99228 Jan 25 12:56 ibdata1.ibz

-rw-r-----  1 mysql mysql  5242880 Jan 25 13:09 ib_logfile0

-rw-r-----  1 mysql mysql  5242880 Jan 25 13:09 ib_logfile1

 

위 로그를 보면 ib_logfile 외에도 압축이 해제된 ibdata1 이 생성된 것을 볼 수 있다.

 

5.    ibbackup 본의 이용

백업본의 이용은 간략하게 이야기 하겠다.

 

- datadir 경로에 백업받은 frm 파일로 수정한다.

- 로그를 적용한 데이터 파일 및 새로 생성된 로그파일을 원래 위치로 이동시킨다.

- mysql 을 실행한다.

- mysql 을 띄운 후 적용할 binary logfile 이 있는 경우 이를 적용한다.

 

위 과정에 대해서는 추후에 다른 문서를 통해 이야기 하겠다.