테스트 환경:
MySQL 5.5.14
testdb01 데이터베이스 아래에 테이블 tb1001이 있고, 현재 테이블에는 두 개의 데이터가 있습니다:
##==================================== ====== ================##
오류 없이 빈 세트가 반환된 것을 발견했습니다. .
이것은 또한 내 동료의 작업 현상을 합리적으로 설명합니다. mysqldump 프로세스 중에 테이블 구조가 수정되고 수정 작업이 차단되지 않았으며 mysqldump 작업이 "정상적으로 완료"되었습니다.
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb1001` 작업은 오류나 데이터를 반환하지 않으므로 mysqldump 프로세스는 tb1001을 빈 테이블로 처리한 다음 테이블이 모두 나올 때까지 계속해서 후속 테이블을 내보냅니다. 그러면 테이블이 성공적인 실행 상태를 반환합니다. 그러나 내보낸 백업에는 이미 tb1001의 데이터가 없습니다. 이 백업을 사용하여 데이터를 복원하면 필연적으로 "데이터 손실"이 발생합니다.
해결책:
MySQL 5.5 버전에서 테이블을 수정하기 전에 먼저 현재 서버가 mysqldump 작업을 수행하고 있는지 확인하여 둘의 병렬 실행을 방지하세요.
mysqldump로 내보낸 테이블을 수정하면 mysqldump가 종료될 때까지 수정 작업이 차단됩니다. 이 상황은 MySQL 버전 5.6과 일치합니다.
요약:
MySQL 버전 5.5의 경우 테이블 수정 작업과 동시에 mysqldump가 실행됩니다.
테이블 수정 작업이 "mysqldump 이후"인 경우 이 켜져 있지만 수정 사항이 내보내지지 않았습니다. 테이블 데이터 이전의 "기간 내에 시작"하면 테이블 수정 작업이 성공적으로 완료되고 mysqldump는 실행에 실패하지 않지만 수정된 테이블의 데이터를 정상적으로 내보낼 수 없습니다.
테이블 수정 작업이 "mysqldum이 수정된 테이블 데이터를 내보냈지만 아직 mysqldump 작업을 완료하지 않았습니다" 기간에 있는 경우 테이블 수정 작업이 차단되고 mysqldum이 성공적으로 완료될 수 있으며 테이블 수정 작업이 수행됩니다. mysqldump 작업이 완료된 후 정상적으로 실행될 수 있습니다.
MySQL 버전 5.5의 경우 백업에서 수정된 테이블의 데이터가 손실되고 데이터 불일치가 발생하는 것을 방지하려면 mysqldump와 테이블 수정 작업을 동시에 수행하지 않아야 합니다!
위 내용은 mysqldump --single-transaction이 변경 테이블을 발견하면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!