.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.