mysqlhotcopy로 백업하기

mysqlhotcopy는 mysql 패키지에 포함된 명령어로, perl로 작성된 백업 스크립트 이다.

mysql 백업 방법중 가장 속도가 빠르며, OS 터미널창에서 mysqlhotcopy 명령을 통해서 DB 디렉토리를 그대로 다른 위치에 copy 한다.

mysql의 여러가지 engine type 중 MyIsam 스토리지 엔진만 가능한 단점이 있다.

1. 데이터베이스 백업

– 사용법 : mysqlhotcopy [db_name] [디렉토리경로]

백업할 DB를 그대로 해당 경로에 디렉토리로 생성하여 복사한다.

mysql root 패스워드가 필요한 경우는 아래와 같이 –password=[db_password] 또는 -p [db_password] 옵션을 추가해서 사용한다.

[root@localhost bin]# ./mysqlhotcopy mysql /home/jook/mysqlbak

DBI connect(‘;host=localhost;mysql_read_default_group=mysqlhotcopy’,”,…) failed: Access denied for user ‘root’@’localhost’ (using password: NO) at ./mysqlhotcopy line 197

[root@localhost bin]# ./mysqlhotcopy –password=XXXX mysql /home/jook/mysqlbak

Flushed 22 tables with read lock (`mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`event`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`ndb_binlog_index`, `mysql`.`plugin`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`proxies_priv`, `mysql`.`servers`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds.

Locked 0 views () in 0 seconds.

Copying 73 files…

Copying indices for 0 files…

Unlocked tables.

mysqlhotcopy copied 22 tables (73 files) in 0 seconds (0 seconds overall).

[root@localhost bin]#

2. 증분 백업

– 기존에 백업된 디렉토리가 존재할 경우는 아래와 같이 –allowold 옵션이나 –addtodest 옵션을 추가해서 백업한다.

두가지 옵션을 사용할 경우는 기존에 백업된 데이터에서 수정된 부분만 업데이트 된다.

–allowold 옵션의 경우, 메뉴얼 상으로는 기존 디렉토리의 이름을 _old를 붙여서 변경한다고 되어 있으나, 테스트 한 버전에서는 _old 디렉토리가 생성되지 않고 –addtodest와 동일한 결과가 나왔다.

[root@localhost bin]# ./mysqlhotcopy –password=XXX mysql /home/jook/mysqlbak

Can’t hotcopy to ‘/home/jook/mysqlbak/mysql’ because directory

already exist and the –allowold or –addtodest options were not given.

[root@localhost bin]# ./mysqlhotcopy –allowold –password=XXX mysql /home/jook/mysqlbak

Existing hotcopy directory renamed to ‘/home/jook/mysqlbak/mysql_old’

Flushed 22 tables with read lock (`mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`event`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`ndb_binlog_index`, `mysql`.`plugin`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`proxies_priv`, `mysql`.`servers`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds.

Locked 0 views () in 0 seconds.

Copying 73 files…

Copying indices for 0 files…

Unlocked tables.

mysqlhotcopy copied 22 tables (73 files) in 0 seconds (0 seconds overall).

[root@localhost bin]#

[root@localhost bin]# ./mysqlhotcopy –addtodest –password=XXX mysql /home/jook/mysqlbak

Flushed 22 tables with read lock (`mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`event`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`ndb_binlog_index`, `mysql`.`plugin`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`proxies_priv`, `mysql`.`servers`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds.

Locked 0 views () in 0 seconds.

Copying 73 files…

Copying indices for 0 files…

Unlocked tables.

mysqlhotcopy copied 22 tables (73 files) in 0 seconds (0 seconds overall).

[root@localhost bin]#

3. 테이블 백업

– 사용법 : mysqlhotcopy [db_name./table_name/] [디렉토리경로]

백업할 테이블을 “DB명./테이블명/” 으로 입력을 하고 mysqlhotcopy명령을 실행하고, 백업 디렉토리에는 해당 테이블만 백업 된다.

[root@localhost bin]# ./mysqlhotcopy –password=XXX mysql./user/ /home/jook/mysqlbak/

Flushed 1 tables with read lock (`mysql`.`user`) in 0 seconds.

Locked 0 views () in 0 seconds.

Copying 3 files…

Copying indices for 0 files…

Unlocked tables.

mysqlhotcopy copied 1 tables (3 files) in 0 seconds (0 seconds overall).

[root@localhost bin]# cd /home/jook/mysqlbak/mysql

[root@localhost mysql]# ls

user.MYD  user.MYI  user.frm

[root@localhost mysql]#