실제 파일에서 MySQL 데이터베이스 복원


139

실제 데이터베이스 파일에서 MySQL 데이터베이스를 복원 할 수 있습니까? 다음 파일 형식의 디렉토리가 있습니다.

client.frm
client.MYD
client.MYI

약 20 개의 테이블이 더 있습니다.

나는 일반적으로 mysqldump 또는 유사한 도구를 사용하여 1 SQL 파일의 모든 것을 가져옵니다. 그래서 이러한 유형의 파일을 처리하는 방법은 무엇입니까?


같은 문제가 있습니다 : 확장자가 FRM, MYD 및 MYI 인 여러 파일. ib_logfile0, ib_logfile1 및 ibdata1 파일도 있습니다. 실행중인 서버에 액세스하거나 덤프를 만들 수 없습니다. 새 MySQL 서버를 실행하고 파일을 사용해 보았지만 성공하지 못했습니다 ... 누구에게 명확한 방법이 있습니까?
flo5783

답변:


132

MySQL MyISAM 테이블은 다음 3 가지 파일의 조합입니다.

  • FRM 파일은 테이블 정의입니다.
  • MYD 파일은 실제 데이터가 저장되는 위치입니다.
  • MYI 파일은 테이블에서 작성된 인덱스가 저장되는 위치입니다.

데이터베이스 폴더에 복사하여 복원 할 수 있어야합니다 (Linux의 경우 기본 위치는 /var/lib/mysql/)

서버가 실행 중이 아닌 동안 수행해야합니다.


64
이것은 MyISAM 테이블에만 해당됩니다. InnoDB는 테이블과 인덱스를 단일 테이블 스페이스 *에 저장하며, 기본적으로 3 개의 파일 ibdata1, ib_logfile0 및 ib_logfile1로 구성됩니다. 데이터베이스를 복원하려면 해당 파일도 필요합니다. * 테이블 별 테이블 스페이스는 가능하지만 기본값은 아닙니다
ax.

21
그는 .frm .myi 및 .myd 파일이 있다고 말합니다. 그런 다음 그것이 MyISAM 테이블이라고 가정했습니다.
Vincent

5
귀중한 대답이지만 일이 잘 작동하려면 한 단계 더 나아가 야했습니다. 파일을 복원하기 위해 루트로 로그인해야했기 때문에 프로세스를 mysql실행하는 사용자가 mysqld액세스 할 수 없었습니다. 을하는 chmod -R mysql:mysql .MySQL의 데이터 디렉토리에하는 것은 빠르고 쉽게,하지만 내 모든 resoterd의 DB를 가지고있는 것 같았다 왜 그 전에, 어떤 테이블이 조금 더 걸리지 않았다, 알아 냈어.
Edurne Pascual

10
herenvardo 나는 당신이 chmod가 아니라 chown을 의미한다고 생각합니다
Oliver M Grech

2
중요한 메모를 요약하면 다음 chown과 같이 복사 된 파일 이 필요할 수 있습니다 .sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr

50

@Vicent의 답변에서 이미 아래와 같이 MySQL 데이터베이스를 복원했습니다.

1 단계. MySQL 서버 종료

단계 2. 데이터베이스 폴더에 데이터베이스를 복사하십시오 (Linux에서 기본 위치는 / var / lib / mysql입니다). mysql 모드에서 데이터베이스 이름과 데이터베이스 이름을 동일하게 유지하십시오.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

3 단계 : 폴더 변경 및 자체 모드 변경 :

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

4 단계 : 데이터베이스 폴더에 ibdata1 복사

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

5 단계 : ib_logfile0 및 ib_logfile1 파일을 데이터베이스 폴더에 복사하십시오.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

자신을 변경하고 해당 파일의 루트를 변경하십시오.

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

또는

sudo chown -R mysql:mysql /var/lib/mysql

6 단계 (선택 사항) : 내 사이트에 파일을 특정 위치에 저장하도록 구성한 다음 해당 위치로 정확하게 복사합니다.

7 단계 : Mysql 서버를 시작하십시오. 모든 것이 돌아와서 즐깁니다.

그게 다야.

자세한 정보는 https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/ 에서 확인하십시오.


4
자세한 단계별 지침은 +1입니다. 그러나 나는 그 내용을 진정으로 반영하기 위해 진술을 편집했습니다.
Peter

# 1932 오류가 발생하여 데이터에 액세스 할 수 없습니다. 데이터베이스가 나타나지만 데이터에 액세스 할 수 없습니다. MAC OS X Mojave에서 XAMPP 7.2.12 실행
Steve1754a

@ Steve1754a 오류는 여러 가지 이유로 발생할 수 있습니다. 1. 데이터베이스를 Mac OS에서 Mac OS로 이동합니까? 2. 해당 파일 / 데이터 / 테이블의 권한을 확인하십시오
biolinh

답변 : 1. 그렇습니다; 2. 나는했다. DB를 완전히 재 구축해야했습니다. 해결책을 찾지 못했습니다. 이야기의 교훈 : 항상 DB의 백업을 만듭니다. XAMPP에서 자동으로 쉽게 수행 할 수있는 방법이 있었으면 좋겠습니다.
Steve1754a

1
당신은 내 생명을 구했습니다
SpongePablo

8

폴더를 복원하는 경우 파일을 mysql : mysql에 넣는 것을 잊지 마십시오.

chown -R mysql:mysql /var/lib/mysql-data

그렇지 않으면 데이터베이스를 삭제하거나 새 열을 추가하려고 할 때 오류가 발생합니다.

MySQL을 다시 시작

service mysql restart

2
이것은 실제로 질문에 대한 답변이 아니지만 매우 도움이되었습니다.
ryantuck

실제로 mysql에 모든 것을 숨겨서는 안된다. mysql 데이터베이스 폴더는 루트 그룹을 유지해야한다
Galvani

8

동일한 문제가 있지만 위의 지침에 따라 데이터베이스를 성공적으로 복구 할 수 없었습니다.

Ubuntu OS에서만 mysql 데이터베이스 폴더를 복구 할 수있었습니다. 내 문제는 읽을 수없는 mysql 데이터 폴더로 데이터베이스를 복구하는 방법입니다. 그래서 개발 환경을 위해 win7 OS로 다시 전환했습니다.

* 참고 win7에서 실행중인 기존 데이터베이스 서버가 있으며 복구 된 파일에서 검색 할 데이터베이스 파일이 거의 필요하지 않습니다. Ubuntu OS에서 데이터베이스 파일을 성공적으로 복구하려면 이전 데이터베이스 서버의 모든 것을 복구하기 위해 mysql 데이터베이스 서버 (win7 OS의 Ubuntu OS와 동일한 버전)를 새로 설치해야합니다.

  1. 복구 된 파일에서 다른 새 mysql 데이터베이스 서버를 동일한 버전으로 만듭니다.

  2. MySQL 서버를 중지

  3. 복구 된 폴더를 복사하고 (C : \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)에 붙여 넣으십시오. mysql 데이터베이스가 저장됩니다.

  4. linux mysql installed 폴더에있는 ibdata1 파일을 복사하여 (C : \ ProgramData \ MySQL \ MySQL Server 5.5 \ data)에 붙여 넣습니다. 교체하기 전에 기존을 덮어 쓰거나 백업하십시오.

  5. mysql 서버를 시작하고 데이터베이스 파일을 성공적으로 복구했는지 확인하십시오.

  6. 현재 사용중인 mysql 서버에서 복구 된 데이터베이스를 사용하려면 복구 된 데이터베이스를 내보내고 기존 mysql 서버로 가져 오십시오.

아무것도 도움이되지 않기를 바랍니다.


1
이 방법은 ibdata1, ib_logfile0 및 ib_logfile1 파일 및 데이터베이스 폴더가있는 우분투 / 데비안에서도 작동합니다. 사용자는 복사되지 않지만 데이터베이스에 새 사용자를 추가하고 덤프 할 수 있습니다.
bokorben

2

MySql 5.1 (Win7) 사용 DB (InnoDbs)를 재생성하기 위해 다음 dirs (my.ini params)의 모든 내용을 교체했습니다.

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

그 후 MySql Service를 시작했으며 모두 정상적으로 작동합니다.


1

네! OS에 따라 데이터베이스 폴더에 추가하고 "MySQL 수정 권한"과 같은 명령을 실행하십시오. 데이터베이스가 복원되었습니다. 파일에 올바른 권한이 설정되어 있는지 확인하십시오.


나는 그것을했지만 테이블을 인식하지 못합니다. 이전 답변에 대한 의견에서 말했듯이.
orezvani

0

나는이 파일을 작동중인 mysql 데이터베이스의 데이터베이스 저장 폴더에 복사하고 db를 시작하고 파일을 "복구"하기를 기다린 다음 mysqldump로 추출했습니다.


-1

필자의 경우 단순히 / var / lib / mysql에서 tc.log를 제거하면 mariadb / mysql을 다시 시작하기에 충분했습니다.


이것은 mysql 서버를 시작 / 다시 시작할 수있는 문제가 아닙니다.
Oluwatumbi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.