나는에 저장되어있는 내 테이블을 열어하려고 할 때 어떤 이유로, .frm
그리고 .ibd
파일 (MySQL의 또는 phpMyAdmin을에 있는지 여부를) 그것은 나에게 구문 오류를 제공, 또는 존재하지 않는 말했다.
나는 이것과 비슷한 문제가있는 다른 게시물을 읽었지만 innodb_file_per_table
활성화 되어 있는지 확인하는 방법을 모르겠 으며 전반적으로 혼란 스럽습니다. 또한 mysql-bin.000002
파일 사본을 txt 파일 로 변환하여 데이터베이스의 데이터가 완전히 손실되지 않았 음을 알 수 있습니다.
데이터베이스는 작년에 만들어졌습니다. 나는 그 mysql-bin.00000
파일 중 6 개를 가지고 있지만 어떤 이유로 든 .000002
가장 큰 파일입니다. 지금 은 모든 데이터베이스에 대한 파일 .ibd
과 .frm
파일이 있지만 MySQL로 다시 복원하거나 적어도 읽을 수있는 것으로 복원하는 방법에 대한 손실이 있습니다.
Windows 2003 Server에서 WampServer 2.4 및 MySQL 5.6.12를 사용하고 있습니다. 또한 InnoDB에서 플러그인을 다운로드해야합니까?
답변
나는 많은 시행 착오를 통해 마침내 내 문제를 파악하고 해결했습니다. 원본 ibdata1 파일이없고 .frm 및 .ibd 파일 만있는 사람들을 위해 다음은 데이터를 복원하는 방법입니다.
- -> http://dev.mysql.com/downloads/utilities 에서 MySQL 유틸리티를 다운로드하여 설치 하십시오 .
- 명령 / 터미널로 이동하여 MySQL 유틸리티 mysqlfrm을 열고이를 사용하여 복원해야하는 테이블 구조를 찾으십시오. 내가 그렇게 한 방법은 mysqlfrm의 파일 위치로 cd 한 다음 “mysqlfrm –server = user : pwd @ localhost –port = 3307″path_to_.frm_file “> table_name.txt”를 입력 한 것입니다. .txt 파일은 원하는 위치를 지정하지 않은 경우 유틸리티가 저장된 폴더와 동일한 폴더에 저장해야합니다.
- 텍스트 파일에는 테이블의 모든 열과 정보 (기본적으로 원래 구조)가 포함 된 CREATE TABLE 문이 표시됩니다. 해당 CREATE 문을 모든 정보와 함께 복사하십시오.
- MySQL 명령에서 새 데이터베이스 (CREATE DATABASE database_name)를 작성하십시오. 원래 데이터베이스 이름과 같은 이름으로 만드십시오.
- 새 데이터베이스 내에 새 테이블을 만듭니다. 폴더와 이름이 같을 필요는 없습니다. 명령 프롬프트에서 새 테이블을 만들 수 있지만 웹을 통한 MySQL 관리를 처리하는 무료 소프트웨어 도구 인 PhpMyAdmin에서 테이블을 만들었습니다. PhpMyAdmin에서 데이터베이스를 클릭 한 다음 SQL 테이블을 클릭하고 # 3에서 테이블 구조를 붙여 넣었습니다. 참고로 명령 프롬프트에서 테이블 이름을 “table”로 지정하면 항상 오류가 발생하므로 해당 이름을 피하십시오.
- MySQL 명령에서 데이터베이스로 이동하여 “ALTER TABLE table_name DISCARD TABLESPACE”를 입력하면이 테이블의 .ibd 파일이 제거됩니다.
- 원래 테이블 (복원하려는 테이블)의 .ibd 파일을 새로 만든 테이블에 복사하여 방금 제거한 .ibd 파일을 바꿉니다. 초기 .ibd 파일을 새로 만든 테이블 이름으로 변경하십시오. 방금 삭제 한 이전 .ibd 파일을 모방합니다. 이 폴더는 컴퓨터의 새로 생성 된 데이터베이스 폴더 아래 MySQL 데이터 폴더에서 찾을 수 있습니다.
- MySQL 명령으로 돌아가서 데이터베이스로 이동하여 “ALTER TABLE table_Name IMPORT TABLESPACE”를 입력하십시오. “경고”(1) 오류 유형 설명이 표시되지만 무시하십시오.
- 그리고 끝났다! 새 테이블에 액세스하려고하면 이전 테이블의 모든 데이터가 포함되어야합니다.
도움이 되었기를 바랍니다. 궁금한 점이나 의견이 있으면 알려주세요! 또한 자세한 내용은 http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file 을 확인 하십시오.
답변
ibdata
MySQL이 .ibd 파일을 이해하려면 기본 InnoDB 데이터 파일 (일반적으로 이름이 지정됨) 이 필수적입니다.
바이너리 파일을 사용하여 서버간에 데이터를 이동해야하는 경우 MySQL을 완전히 중지 한 다음 ibdata 파일을 포함하여 모든 데이터 파일 을 디렉토리간에 이동해야합니다 .
Windows에서 서버간에 데이터를 이동하는보다 안정적인 메커니즘은 ( mysqldump
) 또는 PHPMyAdmin (또는 유사한 도구)에서 데이터베이스 내보내기 를 사용하는 것 입니다.
서버가 계속 실행되는 동안 이진 로깅을 활성화 한 경우 (주석에 따라 다를 수 있음) mysqlbinlog
mysql-bin 파일에서 서버에서 실행 한 모든 SQL 문을 복구 하는 데 사용할 수도 있습니다. 그런 식으로 데이터베이스를 다시 만듭니다. mysql-bin 파일에는 유닉스 타임 스탬프 가 있어야합니다 .
원본 데이터베이스 파일을 잃어 버렸고 남은 모든 개별 .ibd 파일 인 경우 주석에서 akuzminsky의 제안에 따라 데이터를 복구해야 할 수도 있습니다.
MySQL 5.6에는 InnoDB .ibd 데이터 파일 ( 이동식 테이블 스페이스 ) 이동을위한 몇 가지 새로운 기능 이 있지만 약간의 노력이 필요하며, 데이터베이스 크기가 작 으면 mysqldump
.
답변
akuzminsky에 의해 질문 코멘트에서 생성 된 위키 답변
*.ibd
files가 보이면 innodb_file_per_table
is는 ON
, 그렇지 않으면 모든 테이블이에있는 것입니다 ibdata1
.
테이블이 존재하지 않으면 InnoDB 사전에서 테이블이 누락 된 것입니다. 모든 테이블을 별도의 SQL 덤프 (하나의 테이블-하나의 파일)로 덤프하십시오. 덤프 할 수없는 테이블은 TwinDB 복구 툴킷으로 복원 할 수 있습니다 .
아직 바이너리 패키지가 없습니다. GitHub에서 소스 코드를 가져 와서 컴파일해야합니다. InnoDB 사전 복구 지침을 참조하십시오 . 매우 간단합니다.
git clone git@github.com:twindb/undrop-for-innodb.git
그리고
make all