zmanda를 사용한 쉬운 MySQL 백업과 복구 (증분백업 가능)
zmanda를 사용한 MySQL 백업과 복구
1. zmanda는 복잡한 mysql의 옵션을 사용하지 않고 쉽게 mysql을 백업하고, 복구할 수 있는 유틸리티이다. 본 문서에서는 자체 백업만 언급하였다. 원격 백업 혹은 replication에 대해서는 zmanda 사이트의 메뉴얼을 읽어보기 바란다.
적용 가능한 MySQL 버전:
MySQL 4.1.x and MySQL 5.x
Manual:
http://mysqlbackup.zmanda.com/index.php/Zmanda_Recovery_Manager_for_MySQL_Users_Manual
http://www.zmanda.com/quick-mysql-backup.html
2. 다운로드, 설치
# lftpget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/RPM/MySQL-zrm-2.1-1.noarch.rpm
# lftpget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/RPM/MySQL-zrm-client-2.1-1.noarch.rpm
아래의 3가지 perl 모듈이 필요하다.
===
*중요 : perl-DBD-MySQL 패키지도 필요하다. 만약 이 패키지가 설치되어 있지 않을 경우, yum 으로 설치하면 mysql 패키지도 의존성으로 인하여 같이 설치하려고 한다. MySQL을 소스로 설치했다면, 자신의 OS 버전에 맞는 패키지를 직접 다운로드 하여 rpm -ivh --nodeps perl-DBD-MySQL-xxx 형식을 사용하여 의존성을 체크하지 않고 설치하도록 한다.
===
[root@localhost ~]# yum install perl-DBI perl-XML-parser
[root@localhost ~]# rpm -ivh MySQL-zrm-*
[root@localhost ~]# rpm -ql MySQL-zrm
/etc/logrotate.d/mysql-zrm
/etc/mysql-zrm
/etc/mysql-zrm/RSS.header
/etc/mysql-zrm/mysql-zrm-release
/etc/mysql-zrm/mysql-zrm-reporter.conf
/etc/mysql-zrm/mysql-zrm.conf
/etc/xinetd.d/mysql-zrm-socket-server
/usr/bin/mysql-zrm
/usr/bin/mysql-zrm-abort-backup
/usr/bin/mysql-zrm-backup
/usr/bin/mysql-zrm-check
/usr/bin/mysql-zrm-extract-backup
/usr/bin/mysql-zrm-getconf
/usr/bin/mysql-zrm-list
/usr/bin/mysql-zrm-manage-backup
/usr/bin/mysql-zrm-migrate-file-ownership
/usr/bin/mysql-zrm-parse-binlogs
/usr/bin/mysql-zrm-purge
/usr/bin/mysql-zrm-reporter
/usr/bin/mysql-zrm-restore
/usr/bin/mysql-zrm-scheduler
/usr/bin/mysql-zrm-verify-backup
/usr/bin/zrm-pre-scheduler
/usr/lib/mysql-zrm/Data/Report.pm
/usr/lib/mysql-zrm/Data/Report/Base.pm
/usr/lib/mysql-zrm/Data/Report/Plugin/Csv.pm
/usr/lib/mysql-zrm/Data/Report/Plugin/Html.pm
/usr/lib/mysql-zrm/Data/Report/Plugin/Text.pm
/usr/lib/mysql-zrm/XML/RSS.pm
/usr/lib/mysql-zrm/ZRM/Common.pm
/usr/lib/mysql-zrm/ZRM/MySQL.pm
/usr/lib/mysql-zrm/ZRM/Replication.pm
/usr/lib/mysql-zrm/ZRM/SnapshotCommon.pm
/usr/share/doc/MySQL-zrm-2.1
/usr/share/doc/MySQL-zrm-2.1/AUTHORS
/usr/share/doc/MySQL-zrm-2.1/COPYING
/usr/share/doc/MySQL-zrm-2.1/INSTALL
/usr/share/doc/MySQL-zrm-2.1/README
/usr/share/doc/MySQL-zrm-2.1/README-plugin-encrypt
/usr/share/doc/MySQL-zrm-2.1/README-plugin-post-backup
/usr/share/doc/MySQL-zrm-2.1/README-plugin-pre-backup
/usr/share/doc/MySQL-zrm-2.1/README-plugin-pre-scheduler
/usr/share/doc/MySQL-zrm-2.1/README-plugin-snapshot-plugin
/usr/share/doc/MySQL-zrm-2.1/README-plugin-socket-copy
/usr/share/doc/MySQL-zrm-2.1/README-plugin-ssh-copy
/usr/share/man/man1/mysql-zrm-abort-backup.1.gz
/usr/share/man/man1/mysql-zrm-backup.1.gz
/usr/share/man/man1/mysql-zrm-check.1.gz
/usr/share/man/man1/mysql-zrm-extract-backup.1.gz
/usr/share/man/man1/mysql-zrm-list.1.gz
/usr/share/man/man1/mysql-zrm-manage-backup.1.gz
/usr/share/man/man1/mysql-zrm-parse-binlogs.1.gz
/usr/share/man/man1/mysql-zrm-purge.1.gz
/usr/share/man/man1/mysql-zrm-reporter.1.gz
/usr/share/man/man1/mysql-zrm-restore.1.gz
/usr/share/man/man1/mysql-zrm-scheduler.1.gz
/usr/share/man/man1/mysql-zrm-verify-backup.1.gz
/usr/share/man/man1/mysql-zrm.1.gz
/usr/share/man/man5/mysql-zrm-reporter.conf.5.gz
/usr/share/man/man5/mysql-zrm.conf.5.gz
/usr/share/mysql-zrm
/usr/share/mysql-zrm/plugins
/usr/share/mysql-zrm/plugins/encrypt.pl
/usr/share/mysql-zrm/plugins/lvm-snapshot.pl
/usr/share/mysql-zrm/plugins/parse-binlogs.pl
/usr/share/mysql-zrm/plugins/post-backup.pl
/usr/share/mysql-zrm/plugins/pre-backup.pl
/usr/share/mysql-zrm/plugins/pre-scheduler-plugin.pl
/usr/share/mysql-zrm/plugins/socket-copy.pl
/usr/share/mysql-zrm/plugins/socket-server.pl
/usr/share/mysql-zrm/plugins/ssh-copy.pl
/usr/share/mysql-zrm/plugins/xinetd.smf
/usr/share/mysql-zrm/plugins/zfs-snapshot.pl
/var/lib/mysql-zrm
/var/log/mysql-zrm
/var/log/mysql-zrm/mysql-zrm.log
[root@localhost ~]#
[root@localhost ~]# rpm -ql MySQL-zrm-client
/etc/xinetd.d/mysql-zrm-socket-server
/usr/lib/mysql-zrm/ZRM/SnapshotCommon.pm
/usr/share/mysql-zrm/plugins/lvm-snapshot.pl
/usr/share/mysql-zrm/plugins/socket-copy.pl
/usr/share/mysql-zrm/plugins/socket-server.pl
/usr/share/mysql-zrm/plugins/ssh-copy.pl
/usr/share/mysql-zrm/plugins/zfs-snapshot.pl
/var/lib/mysql-zrm
/var/log/mysql-zrm
/var/log/mysql-zrm/mysql-zrm.log
[root@localhost ~]#
3. 설정
[3.1] /etc/my.cnf 파일 설정
MySQL의 환경설정 파일(/etc/my.cnf)에서 바이너리 로그를 생성하도록 설정한다.
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1
[3.2] /etc/mysql-zrm/mysql-zrm.conf 파일 설정
/etc/mysql-zrm/mysql-zrm.conf 파일에서 MySQL 접속 아이디와 패스워드를 설정한다.
[MySQL server parameters]
user=mysqlbackup
password="mysqlbackup_password"
host="localhost"
port=3306
socket=/tmp/mysql.sock
mysql의 캐릭터셋을 지정한다. 지정하지 않으면 디폴트값으로 ut8로 지정된다.
default-character-set=utf8
mysql 실행파일 경로와 binlog 파일의 경로, 임시파일 경로 설정.
mysql-binpath="/usr/local/server/mysql/bin"
mysql-binlog-path="/usr/local/server/mysql/var"
tmpdir=/tmp
[Backup parameters]
백업 레벨이 0이면 전체 백업, 1이면 증분 백업
# Backup level.
backup-level = 0
백업 모드에는 raw와 logical이 있다. raw는 DB와 동일한 파일을 복사(mysqlhotcopy)하고, logical은 .sql의 파일로 백업한다. (logical로 백업하면 .sql 파일을 생성하므로, OS에 관계없이 복구가 가능하다.)
# Backup method
backup-mode = logical
백업 파일을 저장할 디렉토리 경로를 설정한다.
destination=/backup/mysql
백업 파일을 보유할 기간을 명시한다. D는 일, W는 주, M은 월을 의미한다. 아래와 같이 10D로 설정하면 백업 파일을 10일동안만 보관하고, 10일 이후에는 자동으로 삭제한다.
retention-policy=10D
모든 데이터 베이스를 백업대상으로 한다.
all-databases=1
[ZRM parameters]
백업을 한 다음 백업 리포트를 전송할 메일 지정. 메일을 지정하지 않으면, 디폴트로 발송하지 않는다.
mailto="mymail@domain.com"
=======================================
* MySQL 서버 프로세스를 구동하는 유저는 mysql 이어야 한다. *
=======================================
4. 백업
아래 명령을 사용하면, 백업셋 이름으로 dailyrun을 사용하여 곧바로 모든 DB 테이블을 백업한다. (Full Backup) 백업을 완료하면 /etc/mysql-zrm/dailyrun 디렉토리내에 last_backup 파일을 만든다. 이 파일에는 저장된 백업파일의 경로가 입력되어 있다.
# mysql-zrm-scheduler --now --backup-set dailyrun --backup-level 0
# cat /etc/mysql-zrm/dailyrun/last_backup
/backup/lug/mysql/dailyrun/20081229135816
백업 파일 검증하기.
# mysql-zrm --action verify-backup --backup-set dailyrun
verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1
dailyrun:verify-backup:INFO: Verification successful
백업 상태 로그 보기.
# mysql-zrm-reporter --where backup-set=dailyrun --show backup-status-info
REPORT TYPE : backup-status-info
backup_set backup_date backup_level backup_status backup_type comment
-----------------------------------------------------------------------------------------------------------------------------
dailyrun 2008년 12월 29일 (월) 0 Backup succeeded regular ----
오후 01시 58분 16초
백업된 크기와 백업방법, 시간등을 확인한다.
# mysql-zrm-reporter --where backup-set=dailyrun --show backup-performance-info
REPORT TYPE : backup-performance-info
backup_set backup_date backup_level backup_size backup_size_compressed backup_time backup_type compress_encrypt_time
----------------------------------------------------------------------------------------------------------------------------------------------------------------
dailyrun 2008년 12월 29일 (월) 0 124.21 MB ---- 00:00:35 regular ----
오후 01시 58분 16초
매일 새벽 2시에 백업을 하도록 cron에 설정한다.(Full Backup)
# mysql-zrm-scheduler --add --interval daily --backup-set dailyrun --start 02:00
cron에 설정되었는지 확인한다.
# mysql-zrm-scheduler --query
schedule:INFO: ZRM for MySQL Community Edition - version 2.1
Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log
0 2 * * * /usr/bin/zrm-pre-scheduler --action backup --backup-set dailyrun --backup-level 0 --interval daily
5. 복구
백업에 사용할 이미지의 정보를 확인한다.
# mysql-zrm-reporter --show restore-info --where backup-set=dailyrun
REPORT TYPE : restore-info
backup_set backup_date backup_level backup_directory backup_status comment
-----------------------------------------------------------------------------------------------------------------------------------------------------
dailyrun 2008년 12월 29일 (월) 0 /backup/lug/mysql/dailyrun/2008122913581 Backup succeeded ----
오후 01시 58분 16초 6
복구옵션(-restore)과 함께 위의 빨간색 백업 디렉토리를 소스 디렉토리로 지정하여 복구한다.
# mysql-zrm -restore --backup-set dailyrun --source-directory /backup/lug/mysql/dailyrun/2008122913581
logical 즉 .sql 형식으로 백업해 두면 어떤 시스템(윈도우즈,리눅스,솔라리스등)에서도 mysql 명령어로 복구가 가능하다는 장점이 있다.
[Addition]
zmanda는 perl로 만들어진 오픈소스이다.
[root@localhost ~]# cat /usr/bin/mysql-zrm
#!/usr/bin/perl
#
# Copyright (c) 2006 Zmanda Inc. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Contact information: Zmanda Inc, 505 N Mathlida Ave, Suite 120
# Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
#
#
use strict;
use warnings;
our $oldPATH = $ENV{'PATH'};
$ENV{'PATH'} = "/usr/local/bin:/opt/csw/bin:/usr/bin:/usr/sbin:/sbin:/bin:/usr/ucb";
#path where ZRM utilities are installed
my $ZRM_BINPATH="/usr/bin";
my $USAGE="--action <backup|restore|schedule-backup|report|list|getconf|purge|parse-binlogs|check|verify-backup|extract-backup|abort-backup>nHelp on individual action items can be obtained by specifying --help with the required action.nFor example: 'mysql-zrm --action backup --help'";
my @cmd_args;
sub usage()
{
print STDERR "$_[0]n";
print STDERR "USAGE:n";
print STDERR "$USAGEn";
exit(2);
}
sub getAction()
{
my $len = @ARGV;
my $i;
my $act;
for( $i = 0; $i < $len; $i++ ){
if( $ARGV[$i]=~/^--action=/ ){
$act = $';
}elsif( $ARGV[$i]=~/^--action/ ){
$i++;
if( $i < $len ){
$act = $ARGV[$i];
}
}else{
my $x = ""$ARGV[$i]"";
push @cmd_args, $x;
}
}
if( ! defined $act || $act eq "" ){
&usage( "ERROR: Please specify --action" );
}
$ENV{"ZRM_CMD_NAME"}="$0 --action $act";
$ENV{"ZRM_LAUNCHER"}=$$;
return $act;
}
sub main()
{
my $act = getAction();
if( !defined $act ){
&usage( "ERROR: Please specify --action" );
}
my $cmd;
if($act eq "backup") {
$cmd = "mysql-zrm-backup";
} elsif($act eq "restore") {
$cmd = "mysql-zrm-restore";
} elsif($act eq "list" ) {
$cmd = "mysql-zrm-list";
} elsif($act eq "purge" ){
$cmd = "mysql-zrm-purge";
} elsif($act eq "parse-binlogs"){
$cmd = "mysql-zrm-parse-binlogs";
} elsif($act eq "check"){
$cmd = "mysql-zrm-check";
} elsif($act eq "verify-backup"){
$cmd = "mysql-zrm-verify-backup";
} elsif($act eq "extract-backup"){
$cmd = "mysql-zrm-extract-backup";
} elsif($act eq "abort-backup"){
$cmd = "mysql-zrm-abort-backup";
} elsif($act eq "schedule-backup"){
$cmd = "mysql-zrm-scheduler";
} elsif($act eq "report"){
$cmd = "mysql-zrm-reporter";
} elsif($act eq "getconf"){
$cmd = "mysql-zrm-getconf";
} elsif($act eq "manage-backup"){
$cmd = "mysql-zrm-manage-backup";
}else{
&usage("ERROR: Unknown Action '$act'");
}
my $r = system( "$ZRM_BINPATH/$cmd @cmd_args" );
exit( $r>>8 );
}
&main();
[root@localhost ~]#
혹시라도 잘못된 사항이나, 추가적인 내용이 있으면 코멘트 남겨주세요.
망극!
- 끝 -
[출처] zmanda를 사용한 쉬운 MySQL 백업과 복구 (컴플러스) |작성자 힘쓰
'리눅스 > MySQL' 카테고리의 다른 글
최대 동시접속자수 테스트 프로그램 (0) | 2015.01.16 |
---|---|
error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory (0) | 2015.01.16 |
[그누보드] mysql 4.0 이하에서 4.1 이상으로 서버이전후 로그인 안될때 (0) | 2015.01.16 |
[제로보드4] mysql 4.0 이하에서 4.1 이상으로 서버이전후 로그인 안될때 (0) | 2015.01.16 |
mysql-table-sync를 이용한 MySQL 데이터 동기화 (0) | 2015.01.16 |