>  기사  >  데이터 베이스  >  mysqldump 예제에 대한 자세한 설명

mysqldump 예제에 대한 자세한 설명

零下一度
零下一度원래의
2017-07-19 16:06:231394검색

일부 프로덕션 환경에서는 mysqldump --single-transaction을 사용하여 야간에 데이터베이스 백업을 수행했는데, 백업 기간 동안 동료가 실수로 일부 작업은 성공하고 일부는 실패했습니다.

본 테스트는 MySQL 5.6.36에서 진행되었는데, 이 문제에 대한 버전 차이가 있습니다!

##=========================================== ===== ===========================##

mysqldump의 단일 트랜잭션 매개변수에 대한 설명은 다음과 같습니다.

Creates a consistent snapshot by dumping all tables in a
single transaction. Works ONLY for tables stored in
storage engines which support multiversioning (currently
only InnoDB does); the dump is NOT guaranteed to be
consistent for other storage engines.
 While a
--single-transaction dump is in process, to ensure a
valid dump file (correct table contents and binary log
position), no other connection should use the following
statements: ALTER TABLE, DROP TABLE, RENAME TABLE,
TRUNCATE TABLE, as consistent snapshot is not isolated
from them.
 Option automatically turns off --lock-tables.

빨간색 글씨 부분이 포커스인데 조금 헷갈릴 수 있으니 테스트해보겠습니다.

"Mysqldump의 여러 주요 옵션 탐색" 소개에 따르면 백업을 위해 실행하는 mysqldump --single-transaction --master-data 명령은 다음 코드를 실행하는 것과 같습니다.

FLUSH TABLES;
FLUSH TABLES WITH READ LOCK;SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
SHOW MASTER STATUS;
UNLOCK TABLES;

SHOW TABLES LIKE 'xxx'SET OPTION SQL_QUOTE_SHOW_CREATE=1SHWO CREATE TABLE 'xxx'SHOW FIELDS FROM 'xxx'SHOW TABLE STATUS LIKE 'xxx'SELECT /*!40001 SQL_NO_CACHE */ * FROM  xxx

QUIT

시나리오 1: mysqldump가 시작되었지만 아직 백업되지 않았습니다. 테이블 tb001에 도달하면 다른 세션에서 테이블 tb001에 대해 변경 작업을 수행한 후 mysqldump가 테이블 tb001을 내보냅니다. 변경 작업은 성공적으로 완료되었지만 mysqldump 작업은 실패합니다.

시나리오 2: mysqldump가 백업을 시작하고 tb001 내보내기를 완료합니다. 다른 테이블을 내보내는 동안 다른 세션이 해당 테이블에 대해 변경 작업을 수행합니다.

mysqldump가 완료되거나 종료될 때까지 테이블 변경 작업이 차단됩니다. 실패 후.

mysqldump를 사용하여 백업할 때 시나리오 2의 환경을 시뮬레이션할 때 오류 메시지는 다음과 같습니다.

mysqldump: 오류 1412: 테이블 정의가 변경되었습니다. 행: 0

에서 테이블 `tb1002`을 덤프할 때 트랜잭션을 다시 시도하십시오. 내보내기 파일 보기, 최종 내용은 다음과 같습니다.

--
-- Dumping data for table `tb1002`--LOCK TABLES `tb1002` WRITE;/*!40000 ALTER TABLE `tb1002` DISABLE KEYS */;

요약:

단일 트랜잭션 매개변수는 여러 버전의 Innodb를 통해 데이터 일관성을 얻는 반면 ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE 등과 같은 작업은 . 데이터 일관성이 손상됩니다. 이러한 작업은 동시에 실행할 수 없습니다.
"mysqldump가 시작된 후 수정된 테이블 데이터를 내보내기 전" 기간 내에 테이블 수정 작업이 시작되면 테이블 수정 작업은 성공적으로 완료되지만 mysqldump는 실패합니다.


다음 이후에 테이블 수정 작업이 시작되면; "mysqldum이 내보내졌습니다." "테이블 데이터가 수정되었지만 mysqldump 작업이 완료되기 전에" 테이블 수정 작업이 차단되고 mysqldump 작업이 완료된 후 테이블 수정 작업이 정상적으로 완료될 수 있습니다.

위 내용은 mysqldump 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.