백업의 대상
- 데이터베이스 파일
- 오류 로그 파일, 슬로쿼리 로그 파일
- 바이너리 로그 파일
- 설정파일 my.cnf
- 실행 파일
- 기타 공유 라이브러리, 지원 스크립트, 테스트 툴
콜드 백업
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