어떻게에서 내 MySQL 데이터베이스 중 하나 복원 .myd
, .myi
, .frm
파일을?
어떻게에서 내 MySQL 데이터베이스 중 하나 복원 .myd
, .myi
, .frm
파일을?
답변:
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이 있습니다.]
check table sometable;
수리를 실행하십시오 (필요한 경우에만) : repair table sometable;
방금이 문제를 해결했습니다. Windows 7에서 MySQL 5.1 또는 5.6을 사용하고 있습니다.
이 복구를 위해 .MYI 및 .MYD 파일을 찾을 필요가 없습니다.
innodb_force_recovery = 4
레벨을 사용했습니다 (이 경우에는 필요하지 않음). 감사합니다!
ibdata1
MyISAM이 아닌 InnoDB입니다.
한 가지 참고할 사항 :
.FRM 파일은 테이블 구조를 가지며 MySQL 버전에 따라 다릅니다.
.MYD 파일은 최소한 부 버전이 아닌 버전에만 국한되지 않습니다.
.MYI 파일은 특정 파일이지만 REPAIR TABLE
다른 답변 과 같이 생략하고 다시 생성 할 수 있습니다 .
이 답변의 요점은 테이블의 스키마 덤프가있는 경우이를 사용하여 테이블 구조를 생성 한 다음 해당 .MYD 파일을 백업으로 바꾸고 MYI 파일을 삭제하고 복구 할 수 있다는 것입니다. 모두. 이렇게하면 백업을 다른 MySQL 버전으로 복원하거나을 사용하지 않고 데이터베이스를 모두 이동할 수 있습니다 mysqldump
. 큰 데이터베이스를 이동할 때 이것이 매우 유용하다는 것을 알았습니다.
단순한! 더미 데이터베이스 만들기 (예 : abc)
이 모든 .myd, .myi, .frm 파일을 mysql \ data \ abc로 복사하십시오. 여기서 mysql \ data \는 모든 데이터베이스의 .myd, .myi, .frm이 저장되는 위치입니다.
그런 다음 phpMyadmin으로 이동하여 db abc로 이동하면 데이터베이스를 찾을 수 있습니다.
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 |
+------------------+-------+----------+----------+
.sql
파일 .sql
에 액세스 할 필요없이 파일을 파일로 변환하는 솔루션을 찾았습니다 ( 파일을 서버 로 가져오고 데이터베이스를 복구 할 수 있음)./var
디렉토리 으므로 서버 관리자가 아니어도 할 수 있습니다.
컴퓨터에 XAMPP 또는 MAMP가 설치되어 있어야합니다.
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을 통해 새 데이터베이스를 생성하고 탐색 표시 줄에서 '가져 오기'를 누른 후 다음 단계에 따라 가져 오기하여 다른 서버로 가져올 수 있습니다.
정확히 동일한 버전의 mySQL이고 해당 디렉토리에 모든 관련 파일을 보유한 경우 파일을 데이터 폴더의 적절한 이름이 지정된 서브 디렉토리 디렉토리로 복사 할 수 있습니다. 모든 파일이 없으면 문제가있을 것입니다.
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
ib_ * 파일의 이름을 바꾸라는 메시지가 나타납니다. 나는 그것을했고 그것은 db를 돌려 주었다.
위의 설명은 나를 위해 일하는 것 (아마도 조밀하거나 게으른)을 얻기에 충분하지 않았으므로 나중에 도움이되는 답변을 찾았 으면이 스크립트를 만들었습니다. 그것이 다른 사람들을 돕는 희망
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;