.myd, .myi, .frm 파일에서 MySQL 데이터베이스를 복구하는 방법


183

어떻게에서 내 MySQL 데이터베이스 중 하나 복원 .myd, .myi, .frm파일을?


10
나는 이것에 대답했지만 실제로 Serverfault에 속합니다.
— derobert

31
@chandrajeet 당신은 정말로 가장 투표 된 답변을 받아 들여야합니다.
— Tower

2
찬드라 지트, 왜 로버트의 대답을 받아들이지 않습니까? 나는 그것이 나에게도 효과가 있음을 확인한다. 그렇지 않습니까? stackoverflow.com/help/someone-answers
— Taz

답변:


173

MyISAM 테이블 인 경우 .FRM, .MYD 및 .MYI 파일을 데이터베이스 디렉토리 (예 :)에 플로 핑 /var/lib/mysql/dbname하면 해당 테이블을 사용할 수있게됩니다. 원래 서버와 동일한 서버, 동일한 MySQL 버전 또는 동일한 아키텍처 일 필요는 없습니다. 또한 폴더에 대한 소유권을 바꾼다해야 할 수도 있습니다 (예 chown -R mysql:mysql /var/lib/mysql/dbname)

권한 ( GRANT등)은 mysql데이터베이스의 일부입니다 . 따라서 테이블과 함께 복원되지 않습니다. GRANT사용자를 작성하고 액세스 권한을 부여하기 위해 적절한 명령문 을 실행해야 할 수도 있습니다 ( mysql데이터베이스 복원 은 가능하지만 MySQL 버전 및 필요한 mysql_upgrade유틸리티 실행에주의해야 합니다).

실제로 .FRM (테이블 구조) 및 .MYD (테이블 데이터)가 필요할 수도 있지만 .MYI (인덱스)를 다시 작성하려면 테이블을 복구해야합니다.

다운 그레이드하는 경우 릴리스 정보를 확인하고 복구 테이블을 실행하는 것이 가장 좋습니다. 최신 MySQL 버전은 물론 기능을 추가합니다.

[테이블을 혼합하여 일치시키는 경우에는 분명해야하지만 해당 테이블 간의 관계의 무결성이 문제입니다. MySQL은 신경 쓰지 않지만 응용 프로그램과 사용자가 할 수 있습니다. 또한이 방법은 InnoDB 테이블에서 전혀 작동하지 않습니다. MyISAM 만 있지만 파일을 고려하면 MyISAM이 있습니다.]


information_schema 테이블에 적절한 항목을 추가하지 않고도 실제로 작동합니까? MySQL 이이 파일을 올바르게 찾아야한다는 것을 의미합니까?
— Zenshai

4
information_schema 테이블은 실제로 존재하지 않으며 내부 데이터베이스 상태에 대한 뷰일뿐입니다. 참조 dev.mysql.com/doc/refman/5.0/en/information-schema.html
— 브라이언 - 브라질

4
와우, 나는 더럽게 느꼈지만 MySQL4 설치라고 생각한 것에서 전체 디렉토리를 MySQL5.1에 드롭하면 마술처럼 테이블이 다시 만들어졌습니다. 다시 시작하거나 창에 아무것도 없습니다.
— Dave

4
그것은 (모든 테이블에 대해) 실행하기 위해 기억해야하고 check table sometable; 수리를 실행하십시오 (필요한 경우에만) : repair table sometable;
— Nux

3
이것은 훌륭하게 작동했습니다! 파일을 제자리에 놓았지만 소유권을 "mysql : mysql"로 변경할 때까지 mysql은 파일을 "보지"않았습니다.
— sean.boyer

26

MYI 파일을 다시 빌드하려면 REPAIR TABLE을 올바르게 사용하십시오.

약간의 USE_FRM REPAIR 테이블;

그렇지 않으면 다른 오류가 발생할 수 있습니다.


24

방금이 문제를 해결했습니다. Windows 7에서 MySQL 5.1 또는 5.6을 사용하고 있습니다.

  1. "C : \ Program Data \ MySQL \ MSQLServer5.1 \ Data"에있는 이전 파일에서 .frm 파일과 ibdata1 을 복사하십시오 .
  2. 현재 SQL 인스턴스에서 SQL Server 인스턴스를 중지하십시오.
  3. "C : \ Program Data \ MySQL \ MSQLServer5.1 \ Data"에있는 데이터 폴더로 이동하십시오.
  4. 복구하려는 파일 의 .frm 파일 이 포함 된 ibdata1 및 데이터베이스 폴더를 붙여 넣습니다 .
  5. MySQL 인스턴스를 시작하십시오.

이 복구를 위해 .MYI 및 .MYD 파일을 찾을 필요가 없습니다.


이 단계를 수행하고 (다른 모든 것이 실패한 후) innodb_force_recovery = 4레벨을 사용했습니다 (이 경우에는 필요하지 않음). 감사합니다!
— Joshua Stewardson

6
참고 : ibdata1MyISAM이 아닌 InnoDB입니다.
— derobert

14

한 가지 참고할 사항 :

.FRM 파일은 테이블 구조를 가지며 MySQL 버전에 따라 다릅니다.

.MYD 파일은 최소한 부 버전이 아닌 버전에만 국한되지 않습니다.

.MYI 파일은 특정 파일이지만 REPAIR TABLE다른 답변 과 같이 생략하고 다시 생성 할 수 있습니다 .

이 답변의 요점은 테이블의 스키마 덤프가있는 경우이를 사용하여 테이블 구조를 생성 한 다음 해당 .MYD 파일을 백업으로 바꾸고 MYI 파일을 삭제하고 복구 할 수 있다는 것입니다. 모두. 이렇게하면 백업을 다른 MySQL 버전으로 복원하거나을 사용하지 않고 데이터베이스를 모두 이동할 수 있습니다 mysqldump. 큰 데이터베이스를 이동할 때 이것이 매우 유용하다는 것을 알았습니다.


14

단순한! 더미 데이터베이스 만들기 (예 : abc)

이 모든 .myd, .myi, .frm 파일을 mysql \ data \ abc로 복사하십시오. 여기서 mysql \ data \는 모든 데이터베이스의 .myd, .myi, .frm이 저장되는 위치입니다.

그런 다음 phpMyadmin으로 이동하여 db abc로 이동하면 데이터베이스를 찾을 수 있습니다.


가장 짧고 정확한 답변
— Serak Shiferaw

데이터를 복구하는 가장 좋은 방법은 ... WAMP를 설치 한 다음 새 데이터베이스를 만들고 새 데이터베이스 디렉토리 C : \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase에 파일을 복사하십시오 .phpmyadmin 및 새 데이터베이스를여십시오. 데이터보기
— Alexandre georges

7

mysql 내부에서 .myi를 복구 할 수 있다고 생각합니다.

MySQL에서 이러한 유형의 오류 메시지가 표시되는 경우 : 데이터베이스가 쿼리 (쿼리)를 실행하지 못했습니다. 1016 : 파일을 열 수 없습니다 : 'sometable.MYI'. (errno : 145) 오류 메시지 : 1034 : 'sometable'테이블의 키 파일이 잘못되었습니다. 테이블이 손상되었거나 손상된 경우이를 복구하십시오.

다음과 같이 mysql 프롬프트에서 테이블을 확인하고 복구 할 수 있습니다.

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

이제 테이블이 양호해야합니다.

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+

6

.sql파일 .sql에 액세스 할 필요없이 파일을 파일로 변환하는 솔루션을 찾았습니다 ( 파일을 서버 로 가져오고 데이터베이스를 복구 할 수 있음)./var디렉토리 으므로 서버 관리자가 아니어도 할 수 있습니다.

컴퓨터에 XAMPP 또는 MAMP가 설치되어 있어야합니다.

  • XAMPP를 설치 한 후 설치 디렉토리 (일반적으로 C:\XAMPP)와 하위 디렉토리로 이동하십시오 mysql\data. 전체 경로는C:\XAMPP\mysql\data
  • 안에는 다른 데이터베이스의 폴더가 표시됩니다. 복사 및이의 전체 폴더에 붙여 넣기 .myd, .myi그리고 .frm거기에 파일을. 해당 폴더의 경로는

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • 그런 다음 localhost/phpmyadmin브라우저를 방문하십시오 . mysql\data폴더에 붙여 넣은 데이터베이스를 선택하고 탐색 모음에서 내보내기를 클릭하십시오. .sql파일 로 내보내기를 선택 합니다. 그런 다음 파일을 저장할 위치를 묻는 팝업이 나타납니다.

그리고 그게 다야! 이제이 (한다) .sql원래이었다 데이터베이스에 포함 된 파일 .myd, .myi및 .frm파일을. 그런 다음 phpMyAdmin을 통해 새 데이터베이스를 생성하고 탐색 표시 줄에서 '가져 오기'를 누른 후 다음 단계에 따라 가져 오기하여 다른 서버로 가져올 수 있습니다.


5

정확히 동일한 버전의 mySQL이고 해당 디렉토리에 모든 관련 파일을 보유한 경우 파일을 데이터 폴더의 적절한 이름이 지정된 서브 디렉토리 디렉토리로 복사 할 수 있습니다. 모든 파일이 없으면 문제가있을 것입니다.


정확히 동일한 버전의 MySQL이없는 경우 어떻게해야합니까?
— Jo Sprague


2

위의 설명은 나를 위해 일하는 것 (아마도 조밀하거나 게으른)을 얻기에 충분하지 않았으므로 나중에 도움이되는 답변을 찾았 으면이 스크립트를 만들었습니다. 그것이 다른 사람들을 돕는 희망

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;

-2

Windows XP가 있고 MySQL Server 5.5가 설치되어있는 사용자의 경우 MySql Workbench 설치 내에서 위치를 변경하지 않은 경우 데이터베이스 위치는 C : \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data입니다. GUI.


3
문제는 Windows XP MySQL 5.5에서 해당 파일을 찾을 수있는 곳이 아니라 특정 파일 형식에서 복구하는 것입니다.
— Danpe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.