mysqldump를 사용하여 서버에서 야간 백업을 실행하고 있습니다. 불행히도 백업 중에 테이블이 잠기기 때문에 매일 밤 30분 정도 내 사이트가 거의 종료됩니다.
프로세스 목록에 따르면 관련되지 않은 테이블에 대한 쿼리가 때때로 차단되는 것처럼 보입니다. 예를 들어 "INSERT INTO A"는 몇 분 동안 잠긴 상태에 있고 유일한 실행 쿼리는 테이블 B에만 접촉합니다.
이와 같은 백업을 수행하는 더 좋은 방법이 있습니까?
답변1
두 가지 옵션이 있습니다:
A. --skip-lock-tables
mysqldump 옵션을 사용하십시오. 테이블은 잠기지 않지만 백업은 일관성이 없을 수 있습니다(스키마에 따라 다름: 데이터베이스 트랜잭션이 한 번에 여러 테이블에 접촉하고 한 테이블은 이미 백업되고 다른 테이블은 백업되지 않은 경우). 예: 두 테이블: 고객 고객이 먼저 백업된 다음 새 고객/주문 쌍이 삽입되면 백업에 고객이 없는 주문이 발생할 수 있습니다.
이 문제는 mysqldump가 기본적으로 모든 테이블을 잠그는 주된 이유입니다. 이 문제가 귀하에게 적용되지 않는 경우, mysql에서 테이블 잠금을 건너뛰는 것이 가장 간단한 해결책입니다.
B. 다른 백업 방법을 사용하십시오. 예: 읽기 잠금이 있는 테이블 플러시, LVM 스냅샷 생성, 테이블 잠금 해제, LVM 스냅샷 마운트 및 데이터 백업. 이는 단순한 mysqldump보다 빠르고 훨씬 더 복잡해집니다. Google "LVM 스냅샷을 사용한 mysql 백업"에는 사용 가능한 많은 스크립트와 튜토리얼이 있습니다.
MySQL 데이터가 LVM 볼륨에 없는 경우 마스터를 건드리지 않고 슬레이브 MySQL 서버를 생성하고 백업할 수 있으므로 슬레이브에서 잠금이 발생하고 마스터는 항상 무료입니다.