2012-07-21 6 views
3

mysqldump은 테이블과 뷰를 알파벳 순으로 나열한 덤프를 생성한다. 이것은 매우 편리하지 않습니다 테이블 간의 외래 키 관계가있을 때, 그러나, 문제는 쉽게 실행하여 해결 : 뷰, vwapple는, 뷰, vworange에 의존함으로써mysqldump 백업에서 상호 의존적 인 뷰를 실행한다.

SET FOREIGN_KEY_CHECKS=0; 

나는 상황을 가지고, 말하다. mysqldump를 사용하면 vwapple이 나열되고 vworange 전에 실행됩니다. 이는 "view vworange does not exist"오류 메시지가 표시 될 때 문제가됩니다.

이 상황이 어떻게 해결됩니까? 뷰에는 테이블과 비슷한 솔루션이 있습니까? 또는이 문제를 해결하기 위해 각 뷰를 독립적으로 만드는 것이 더 좋습니다.

참고
저는 파이썬 스크립트를 사용하여 데이터베이스를 복원하고 있습니다. 각 데이터베이스 개체를 독립적으로 제어 할 수 있도록 각보기와 테이블은 별도의 .sql 파일에 있습니다.

답변

4

최근 버전의 mysqldump은 전체 데이터베이스를 덤프 할 때 다음과 같은 방식으로 문제를 해결합니다. 데이터베이스의 모든 뷰에 대해 먼저 동일한 구조의 빈 테이블을 만든 다음 뷰를 생성하고 뷰를 생성 한 다음 각 자리 표시 자 테이블을 삭제 한 다음 전망. 테이블을보기로 바꾸면보기가 달라지지 않는 것으로 보입니다.

이 접근법은 또 다른 flaw을 가지고 있기 때문에이 사실을 알고 있습니다.보기의 행에 테이블의 행보다 많은 데이터가 포함될 수 있으므로 일부 임시 테이블을 만들 수 없어 일부 덤프가 수동 개입없이 복구 할 수 없게됩니다 . 이러한 이유로 일부 작업이 필요할 수도 있지만 뷰의 토폴로지 정렬이 바람직합니다.

관련 문제