외국의 주요 제약 조건을 시행하지 않는 mysqldump 파일을 자동으로 만들 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2429655

문제

내 데이터베이스에서 mysqldump 명령을 실행 한 다음 가져 오려고 시도하면 파일의 나중에 테이블을 참조하는 외래 키가있을 수 있지만 테이블을 알파벳순으로 만들려고 시도하면 실패합니다. 아무것도없는 것 같습니다 선적 서류 비치 그리고 나는 같은 답을 찾았습니다 이것 즉, 파일을 포함하도록 작성된 후 파일을 업데이트한다고 말합니다.

set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;

해당 라인을 자동으로 설정하거나 필요한 순서로 테이블을 내보낼 수있는 방법이 없습니까 (모든 테이블 이름을 지루하고 오류가 발생하기 쉬운 모든 테이블 이름을 수동으로 지정할 필요없이)? 그 줄을 스크립트로 감을 수 있었지만 파일을 덤프하고 수동으로 업데이트하지 않고 가져올 수있는 쉬운 방법이 있는지 궁금했습니다.

도움이 되었습니까?

해결책

그만큼 mysqldump 버전 이후 MySQL에 포함 된 명령 4.1.1 기본적으로 외국 키 점검을 끄는 스크립트를 생성합니다. 다음 줄은 덤프 파일의 상단 근처에 포함되어 있습니다.

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

그만큼 /*!40014 ... */ 구문은 a입니다 조건부 의견 이는 MySQL 버전 4.0.14 이상에서 실행됩니다. 이전 외국 키 확인 설정은 덤프 파일의 끝을 향해 복원됩니다.

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

조건부 의견은 다음과 같습니다 클라이언트가 해석합니다 (서버 대신). 덤프 파일을 지원하지 않는 클라이언트와 함께로드하면 외국 키 확인이 비활성화되지 않아 오류가 발생할 수 있습니다. 최상의 결과를 얻으려면 공식 MySQL 명령 줄 클라이언트를 사용하여 덤프 파일을로드하는 것이 좋습니다.

mysql -hserver -uuser -p database < dumpfile.sql

또한 주목할 가치가 있습니다 mysqldump The와 함께 실행됩니다 --compact 옵션, 그런 다음 덤프 파일에서 해외 키 점검을 비활성화하고 다시 활성화하는 명령을 생략합니다.

다른 팁

조심하십시오. 어떤 이유로 든 mysqldump는 --comcact 옵션을 사용하는 경우 외국_key_checks = 0을 작성하지 않습니다.

ciao.

SQL을 내보낼 때 phpmyadmin을 사용하는 경우 선택하십시오 사용자 정의 내보내기 방법. 그런 다음 확인란 옵션 중에서 "클릭하십시오.외국 키 점검을 비활성화합니다". 내보낸 SQL 문은 각각 출력 파일의 시작과 끝에서 비활성화 및 외국 키 점검을 활성화합니다.

"자동"은 아니지만 모든 수출에 대해 직접 진술을 작성할 필요는 없습니다.

사용하면 발생할 수 있습니다 --compact 당신의 하나로 mysqldump 명령.--compact 포함 --skip-comments 그래서 대신에 --compact 하나는 사용해야합니다 --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

사용하는 MySQL 클라이언트를 조심하십시오. mysql 명령, 문제 없습니다. 덤핑:

% mysqldump -u ocp6 -pocp6 ocp6 --single-transaction --result-file=dump.sql 

복원 :

% mysql -u ocp6 -pocp6 ocp6 < dump.sql

모든것이 괜찮아.

사용과 함께 또 다른 MySQL 클라이언트 (Mycli 내 상황에서) 덤프 파일을 복원하려면 :

mysql ocp6@:(none)> \. dump.sql
[…]
(1005, 'Can\'t create table `ocp6`.`composition` (errno: 150 "Foreign key constraint is incorrectly formed")')

나는 그것을 가정한다 Mycli 이해하지 못합니다 조건부 의견.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top