태그 보관물: 백업

XtraBackup을 이용한 MySQL 백업 및 복구

이 글은 XtraBackup을 간단하게 소개한 글이고 자세한 사용법은 MySQL 원격 증분 백업 – Percona XtraBackup 이라는 글에서 다루고 있다.


mysql 백업시 보통은 mysqldump를 사용합니다. 하지만 데이터가 커질수록 mysqldump로 백업한 데이터는 복구에 걸리는 시간이 길어집니다.

mysql 서버를 중단시키지 않고 InnoDB 엔진도 핫백업이 가능한 도구로 XtraBackup이라는 오픈소스 프로그램이 있습니다. 소개를 보면 mysql 상용 백업 프로그램인 InnoDB Hot Backup 보다 더 많은 기능을 제공합니다.

XtraBackup은 기본적으로 InnoDB와 XtraDB의 백업을 지원하지만 같이 설치되는 innobackupex 스크립트를 통해서 MyISAM 방식도 백업이 가능합니다. 그리고 직접 해본 결과 ARCHIVE 방식의 DB도 백업되는 것을 확인했습니다.

개인적인 의견인데 이제 MySQL에서 꼭 MyISAM을 써야될 이유가 퇴색했기에 MyISAM을 돌리기 위해서 할당할 자원을 InnoDB에 최적화 시키는게 좋습니다.

XtraBackup은 증분백업도 지원하는데 InnoDB와 XtraDB만 지원합니다. 이런점 때문이라도 MyISAM 보다는 InnoDB를 쓰는게 좋습니다.

이 글에서는 제가 직접 테스트한 전체백업만 소개하겠습니다. 자세한 사용법은 Percona Xtrabackup – Documentation을 참고하시거나 구글링을 통해서 정보를 얻으실 수 있습니다.

XtraBackup의 설치는 데비안, 레드햇 계열 모두 저장소를 제공하고 있으므로 저장소만 추가하면 apt-get, yum으로 쉽게 설치하실 수 있습니다. 각 리눅스 패키지별 저장소 추가 및 설치도 구글링에 맡기겠습니다. ^^

설치가 끝났으면 아래의 명령으로 풀백업이 가능합니다.

$ innobackupex /백업경로

지정한 백업경로에 /백업경로/년-월-일_시-분-초/ 디렉토리가 생성되며 백업이 됩니다. 자동으로 디렉토리명이 백업시간으로 정해지니까 무척 편리합니다.

복구도 어렵지 않습니다.

먼저 mysql 서버를 중지시킵니다.
mysql이 데이터를 기록하는 디렉토리를 옮겨놓습니다.(mysql 설정 파일 my.cnf의 datadir 참고)

$ mv /var/lib/mysql /var/lib/mysql-old

다시 빈 디렉토리를 만듭니다.

$ mkdir /var/lib/mysql

아래의 명령어로 복구를 시작합니다.

$ innobackupex –copy-back /백업경로/년-월-일_시-분-초/

저는 22GB의 파일을 복구하는데 10분 걸렸습니다.
이걸 mysqldump로 백업한 sql로 복구했다면 수시간이 걸립니다.

복구된 mysql 디렉토리의 권한을 변경합니다.

$ chown -R mysql. /var/lib/mysql

마지막으로 mysql을 재시작 합니다.

참고자료: http://www.tekovic.com/mysql-hot-backup-with-xtrabackup-on-centos