2009-11-26 2 views
4

나는 &을 파일에서 mysql 명령 행 응용 프로그램으로 복사하여 MySQL 데이터베이스에 테이블을 추가했습니다. 내 프로 시저가 파일에서 CREATE TABLE 문을 복사하여 내 개발 데이터베이스에 붙여 넣은 다음 다른 컴퓨터의 테스트 데이터베이스에 붙여 넣기도합니다. 나는 테스트 데이터베이스를 사용하는 유일한 사람이다. 내 CREATE TABLE 문은 Engine = InnoDB를 지정합니다. 테스트 데이터베이스에는 InnoDB가 활성화되어있다.예기치 않은 MySQL 테이블 엔진이 변경 되었습니까?

최근에 또 다른 개발자는 테스트 데이터베이스의 테이블이 모두 MyISAM 테이블임을 발견했습니다. 나는 내 파일을 검사했는데, 여전히 "Engine = InnoDB"라고 말합니다. 내 개발 데이터베이스를 확인했는데 테이블은 Engine = InnoDB입니다.

테스트 데이터베이스가 InnoDB와 아무런 문제가 없다는 것을 증명하기 위해 모든 테이블에서 엔진을 InnoDB로 설정하기 위해 그냥 변경하십시오.

나는 방금 복사 한 & 붙여 넣기 또는 다른 어리석은 실수를하기를 바란다. 하지만 이상하게 보입니다. 모두 테스트 테이블이 MyISAM ... 분명히 내 실수와 일치하지 않을 수 있습니다. 모든 백업 &은 mysqldump로 복원되었습니다.

실수로 엔진을 변경하는 방법이 있습니까?

답변

4

이것은 널리 알려진 MySQL 함정의 또 다른 사례라고 생각합니다. 나는이 문제를 몇 번이나 나 자신에게 부딪혔다.

기본적으로 문제는 어떤 이유로 든 InnoDB 엔진이 시작되지 않으면 (일반적으로 구성 문제) - MySQL이 자동으로 MyISAM 엔진으로 폴백합니다. 명세서는 말한다하더라도 : 이노가 활성화되지 않은 경우

CREATE TABLE (...) ENGINE=InnoDB; 

후, MySQL은 행복하게도 당신을 경고없이 MyISAM 테이블을 생성합니다. 나중에 InnoDB 문제를 발견하고 고치더라도, 문제가 발생하는 동안 생성 된 모든 테이블은 MyISAM으로 남는다. 바이 바이 데이터 무결성! :)

SHOW ENGINES을 실행하면 어떤 엔진이 작동하는지 확인할 수 있습니다. 자세한 내용은 this MySQL bug report을 참조하십시오.

+1

현대 버전에서는 발생하지 않습니다. InnoDB가 시작되지 않으면 서버 시작에 실패합니다. 반면에 설정에서 엔진이 비활성화되어 있으면 엔진을 대체합니다. – MarkR

+0

고마워, 나는 그걸 몰랐다. :) – intgr

관련 문제