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.