MySql 백업Backup & 복구|복원Restore

백업의 대상

  1. 데이터베이스 파일
  2. 오류 로그 파일, 슬로쿼리 로그 파일
  3. 바이너리 로그 파일
  4. 설정파일 my.cnf
  5. 실행 파일
  6. 기타 공유 라이브러리, 지원 스크립트, 테스트 툴

 

콜드 백업

1. 디비 정지
$ mysqladmin shutdown -uroot
2. 디렉토리 백업
$ tar cvf /var/lib/mysql ~/mysqlbak.tar
3. 디비 재기동
$myqld_safe &

바이너리 로그 이용

바이너리 로그 활성화
my.cnf
log-bin을 추가

호스트이름.0000001 이라는 바이너리 파일 생성

mysqlbinlog사용
$ mysqlbinlog hostname.000011 > recover.sql
$ mysql -uroot < recover.sql
(mysqlbinlog는 쿼리문 마지막에 rollback를 넣는다. 문제의 소지가 있으니 참고)

온라인 백업 mysqldump

잠금걸고 온라인 백업
$ mysqldump -uroot --lock-all-tables -master-data=2 > dump.sql
내용을 보고 바이너리 로그의 위치정보 찾기
$ more dump.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='hostname.00042', MASTER_LOG_POS=98;

백업파일 복구
$ mysql -uroot < dump.sql
바이너리로그적용
$ mysqlbinlog --position--98 hostname.000042 > binlog.sql
$ mysql -uroot < binlog.sql

새로운 백업후 바이너리로그 삭제

mysql> PURGE MASTER LOGS TO 'hostname.000042'
(42번 이전의 바이너리 로그를 모두 삭제하는 명령)

 

기타 백업

lvm스냅샷

전체 디비 공유잠금
mysql> FLUSH TABLES WITH READ LOCK;

바이너리 로그의 위치 정보를 알아냄
mysql> SHOW MASTER STSTUS;

디스크에 기록되지 않은 정보를 기록
$ sync

스냅샷을 취득
LVM이라면 lvcreate커맨드

공유 잠금을 해제
mysql> UNLOCK TABLES;

취득한 스냅샷을 테이프 등에 복사
cp..tar...등

innodb의 경우 Xtrabackup

 

Leave a Reply

Your email address will not be published. Required fields are marked *

 characters available