MySQL DB 백업 모범 사례


23

최근 MySQL을 실행하는 프로덕션 웹 서버가 정기적으로 (또는 전혀) 백업되지 않는다는 것을 발견했습니다. SQL Server DB를 백업하는 데 익숙하지만 MySQL DB에 대한 경험이 많지 않습니다. 'mysqldump'또는 다른 DB 백업 도구를 사용하는 모범 사례는 무엇입니까?

나는 밤마다 완료되도록 일정을 잡은 다음 백업 시스템으로 파일을 백업 할 것입니다.

감사.

답변:


29

MySQL 서버 백업을위한 모범 사례 :

MySQL 복제

MySQL에서 복제 설정. 마스터 및 슬레이브 서버를 설정해야합니다. DB에 대한 모든 읽기 / 쓰기는 Slave 서버로 갈 수 있습니다. 복제의 이점은 마스터 서버를 중단하지 않고 슬레이브 서버에서 백업을 수행 할 수 있다는 것입니다. 응용 프로그램은 다운 타임없이 마스터에서 계속 작동합니다.

MySQL 덤프 사용

데이터 세트가 작은 경우 ( "작은"이 상대 용어라는 것을 알고 있습니다. <10GB라고 가정 해 봅시다) mysqldump는 아마 잘 작동합니다. 쉽고, 온라인 상태이며 매우 유연합니다. mysqldump가 할 수있는 몇 가지 일 : 모든 것을 백업하거나 특정 데이터베이스 나 테이블 만 DDL 만 백업하면 더 빠른 복원을 위해 덤프를 최적화하여 결과로 생성되는 sql 파일을 다른 RDBMS 및 더 많은 것들과 더 호환 가능하게 만듭니다.

그러나 가장 중요한 옵션은 백업 일관성과 관련이 있습니다. 내가 가장 좋아하는 옵션은 다음과 같습니다. --single-transaction :이 옵션은 테이블이 InnoDB 스토리지 엔진을 사용하는 경우 일관된 백업을 제공합니다. 읽기 전용이 아닌 MyISAM 테이블이 있으면 백업 할 때이 옵션을 사용하지 마십시오. --master-data = 2 :이 옵션은 --single-transaction 옵션을 추가하지 않은 한 lock-all-tables를 수행하여 덤프 일관성을 유지합니다. --master-data 옵션은 결과 덤프 파일에 이진 로그 위치도 기록합니다 (= 2는이 줄이 덤프 파일의 주석이됩니다)

mysqldump에 대한 최종 참고 사항 : 복원 시간이 백업 시간보다 훨씬 길 수 있음을 명심하십시오. 예를 들어 인덱스 수와 같은 몇 가지 요소에 따라 다릅니다.

LVM 스냅 샷

더 큰 데이터 세트를 가진 사람들에게는 실제 백업이 필요합니다. 콜드 백업 (예 : MySQL 서비스 종료, 데이터 디렉토리 복사, 서비스 다시 시작)을 수행 할 수 있지만 많은 사람들이 다운 타임을 원하지 않습니다. 내가 가장 좋아하는 솔루션은 스냅 샷입니다. 이것은 뜨겁거나 (InnoDB의 경우) 잠깐의 잠금 (MyISAM의 경우)이 필요할 수 있습니다. 모든 데이터를 포함하는 것을 잊지 마십시오 (ib_log 파일 포함). Lenz는 다음과 같은 유용한 유틸리티를 제공합니다. http://www.lenzg.net/mylvmbackup/

MySQL 엔터프라이즈 백업 사용

MySQL Enterprise Backup 사용의 장점 :

  • InnoDB 테이블의 "핫"백업은 특정 테이블 또는 테이블 스페이스 백업 만 차단하지 않고 완전히 온라인으로 수행됩니다.
  • 이전 백업 이후 변경된 데이터 만 백업
  • 압축 백업-스토리지를 최대 90 % 이상 절약합니다.

참조 : http://www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html


7

백업에 사용할 전용 복제본 을 설정하는 것이 좋습니다 . 이를 통해 기본에 영향을주지 않고 모든 백업 작업을 수행 할 수 있습니다. 이렇게하면 아키텍처가 복잡해 지므로 복제 지연을 모니터링하여 모든 것이 작동하는지 확인해야합니다.

실제 프로세스와 관련하여 타사 도구가없는 몇 가지 옵션이 있습니다. mysqldumpInnoDB를 사용한다고 가정하면 명령을 사용하여 스냅 샷을 만들 수 있습니다 mysqldump --all-databases --single-transaction > all_databases.sql. 데이터 크기에 따라 MySQL을 종료하고 데이터 파일을 직접 백업하는 것이 좋습니다. 복제본이 다시 시작되면 작동 중지 된 기간 동안 기본이 수신 한 모든 이벤트가 재생됩니다. MySQL Enterprise를 사용하는 경우 mysqlbackup유틸리티가이를 수행합니다.

복제본 에서 이진 로그 를 활성화하여 증분 백업을 수행 할 수 있습니다 . 분명히 이것은 데이터를 변경하는 이벤트 만 기록하므로 위의 스냅 샷과 결합해야합니다.


3
+1 --single-transaction하지만 추가하는 것을 잊지 말고 my.cnf에서 비활성화 할 수 있기 때문에 기본적으로 활성화되어 있어도 --events --routines항상 사용 --triggers합니다. 데이터베이스에 이러한 유형의 객체가 있는지 여부에 관계없이 표준 연습으로 사용하는 것이 항상 좋습니다.
Michael-sqlbot

참고 mysqldump --all-databases는 낮은 최대 열린 테이블 설정을 정의한 경우 오류를 트리거 할 수 있습니다. mysql.log를 주시하십시오. 복제는 정말로 최선의 백업 방법이 될 것입니다
레이몬드 Nijland

그러면 데이터의 기록 사본을 어떻게 유지합니까? (클라이언트는 종종 한 달 이상 백업을 유지하기를 원하며, 응용 프로그램 버그로 인해 데이터가 손상되면 개발자는 버그 이전의 db 사본을 원합니다.)
RonJohn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.