.frm(SQL 데이터 파일)을 텍스트 파일로 변환

.frm(SQL 데이터 파일)을 텍스트 파일로 변환

.frm(SQL 데이터 파일)을 텍스트 파일로 변환하려고 합니다. 이에 대한 이유는 SQL 엔진이 "무대 뒤에서" 데이터를 어떻게 저장하는지 알고 싶기 때문입니다. 예: "ENUM" SQL 저장소를 사용할 때 "INDEX"라는 "INTEGER"입니다. 따라서 .frm을 .txt로 변환하는 소프트웨어나 방법을 아는 사람이 있다면 모두 감사드리며 즐거운 하루 보내세요.

답변1

이 문서에서는 이를 수행하는 입증된 방법을 제공합니다.

이를 수행하는 방법에 대한 기본 사항은 이해하기가 그리 어렵지 않으며 까다로워지는 세부 사항입니다. 이 문제의 첫 번째 부분은 .frm 파일에서 테이블 정의를 추출하는 방법입니다. 문제의 두 번째 부분은 다른 게시물에서 다루겠습니다. .frm 파일을 읽고 구문 분석하고 테이블 정의를 출력하는 프로그램을 작성할 수 있지만 이는 작업량이 많습니다. 특히 MySQL을 속여 해당 작업을 수행하도록 할 수 있는 경우에는 더욱 그렇습니다. foo.frm 파일에 대해 이 작업을 수행하는 방법은 다음과 같습니다.

mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;

foo라는 InnoDB 테이블을 만들었습니다. MySQL은 $datadir/test에 foo.frm과 foo.ibd 파일을 작성했습니다. 또한 이 테이블을 데이터 사전에 기록했습니다.

mysql> FLUSH TABLES;

이로 인해 MySQL은 열려 있는 모든 테이블을 닫고 쿼리 캐시를 플러시합니다. 그 아이디어는 MySQL이 방금 생성한 "foo" 테이블을 잊어버리도록 하는 것입니다.

bash# cp foo.frm /var/lib/mysql/test;

test.foo에 대한 테이블 정의를 덮어썼습니다. MySQL이 계속 실행되는 동안 우리는 이를 핫하게 수행했습니다.

mysql> SHOW CREATE TABLE `test`.`foo`;

방금 테스트 디렉터리에 복사한 foo.frm 파일에 대한 테이블 정의가 출력됩니다. .frm 파일의 정보가 시스템 테이블스페이스의 정보와 일치하지 않을 가능성이 높기 때문에 MySQL은 아마도 약간 혼란스러울 것입니다. 오류 로그에 다음과 같은 메시지가 표시될 수 있습니다.

[오류] 테이블 ./test/foo에는 InnoDB 데이터 사전에 기본 키가 없지만 MySQL에는 기본 키가 있습니다! MySQL 버전 < 3.23.54로 테이블을 생성하고 기본 키를 정의하지 않았지만 모든 NULL이 아닌 열을 사용하여 고유 키를 정의한 경우 MySQL은 내부적으로 해당 키를 기본 키로 처리합니다. 이 오류는 dump + DROP + CREATE + 테이블 다시 가져오기를 통해 해결할 수 있습니다.

그래도 괜찮습니다. 청소만 하면 됩니다.

mysql> DROP TABLE `test`.`foo`;

수백 개의 테이블에 대해 이 작업을 수행해야 하는 성가심을 피하려면 다음에서 제공된 스크립트를 사용하십시오.블루게코 기사. 당신은 분류되어야합니다. 차그버트.

관련 정보