MySql 백업Backup & 복구 복원Restore

less than 1 minute read

백업의 대상

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

 

콜드 백업

1. 디비 정지 $ mysqladmin shutdown -uroot

  1. 디렉토리 백업 $ tar cvf /var/lib/mysql ~/mysqlbak.tar
  2. 디비 재기동 $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