데이터 폴더의 파일을 사용하여 mysql 데이터베이스를 복원하는 방법은 무엇입니까?

데이터 폴더의 파일을 사용하여 mysql 데이터베이스를 복원하는 방법은 무엇입니까?

어제부터 mysql을 실행할 수 없고, 접속도 되지 않아서 재설치를 하기로 했습니다. 나는 mysql을 다시 설치한 후 데이터베이스를 복원하는 데 필요한 모든 것이 포함된 것으로 추정되는 데이터 폴더를 백업했습니다.

복사하여 붙여넣고 이전 데이터 폴더를 백업으로 덮어썼는데 오류가 발생하여 mysql이 로드되지 않습니다.

내 데이터베이스와 이름이 같은 폴더만 복사하여 붙여넣었습니다.내 데이터베이스), 정상적으로 실행되지만 데이터베이스 자체를 로드할 수 없습니다. SQLyog를 사용하여 데이터베이스에 액세스하려고 하면 모든 테이블에서 "파일을 열 수 없습니다.테이블 이름.ibd"

데이터베이스를 올바르게 복원하려면 어떻게 해야 합니까?

저는 MySQL 4.1과 Windows 7을 사용하고 있습니다.

답변1

Windows에서 MySQL InnoDB 파일 복원

InnoDB형 파일은 더 어려운 작업이었는데, 그래서 이 글을 쓰게 되었습니다. 어떻게 해야 할지 찾는 데 어려움을 겪었지만 작업을 수행하는 데 충분한 정보를 모았습니다. 이제, 보답하려는 노력의 일환으로, 제가 그것을 복원하기 위해 무엇을 했는지 정확히 설명하겠습니다.

백업에는 다음 파일이 있었습니다.

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

*.frm게다가 데이터 폴더에는 파일이 포함된 복원 중인 데이터베이스 이름( ) 의 폴더가 있었습니다 table_name.frm.

서버에서 작동하던 작업을 망치고 싶지 않았기 때문에 실제 서버가 아닌 개발 컴퓨터에서 복원을 수행했습니다. 이미 XAMPP 설치를 통해 MySQL을 설치했습니다. (내 개발 상자는 Windows XP SP2를 실행하고 있습니다). XAMPP는 일반 MySQL 설치와 약간 다르게 MySQL을 설치하므로 여기에서 수행한 작업을 따르는 데 도움이 되면 XAMPP를 설치하는 것이 좋습니다.

먼저 XAMPP의 제어판을 사용하여 MySQL 서비스를 중지했습니다.

위에 나열된 파일( ib*파일 및 파일이 포함된 폴더 *.frm)을 내 로컬 mysql 데이터 폴더( C:\Program Files\xampp\mysql\data)로 이동했습니다.

그런 다음 편집 my.cnf( 위치 C:\Program Files\xampp\mysql\bin)하고 다음과 같이 변경했습니다(66번째 줄부터 시작).

오래된:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

새로운:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(innodb_log_file_size를 로그 파일의 실제 크기로 설정해야 했습니다)

그런 다음 mysql 서비스( C:\Program Files\xampp\mysql_start.bat)를 시작하는 XAMPP 배치 파일을 편집했습니다. –innodb_force_recovery=6mysqld에 대한 호출 끝에 추가했습니다 . 이제 해당 파일의 8번째 줄은 다음과 같습니다.

mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6

이것이 트릭을 만들었습니다! 내 데이터베이스가 내 컴퓨터에서 복구되었습니다. 나는 사용했다 SQL요그데이터베이스의 SQL 덤프를 수행하여 프로덕션 서버에서 복원합니다.

원천


추가 리소스

답변2

투표하고 감사합니다포주 주스 IT훌륭한 답변을 위해. 나는 그의 답변의 도움을 받아 비슷한 문제를 해결했지만 약간 다르기 때문에 공유하겠다고 생각했습니다.

최신 버전의 XAMPP로 업데이트했습니다. 설치 프로그램을 사용하지 않고 새 zip으로 다운로드하기만 하면 문제가 발생합니다.

  1. 먼저 mysql을 중지했습니다(XAMPP를 사용하여 로컬에서 실행 중입니다).
  2. 다음으로 나는my.ini다음 위치에 있는 파일/xampp/mysql/빈/파일 - 나에게 있어서 변경 사항은 #skip-innoodb(라인 136)에서 시작되었습니다. 회선 번호는 다를 수 있습니다.

제가 처음에 찾은 내용은 다음과 같습니다.

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

여기서 문제는 상대 경로인 것 같습니다. C:위의 디렉토리에서 누락된 부분을 확인하세요 . 경로를 절대화하는 것이 나의 첫 번째 단계였습니다.

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. XAMPP의 새 버전에서는 다음을 사용하고 싶습니다.
    • ~ 안에/xampp/mysql/이름을 바꿨어요데이터에게data_old
    • 그런 다음 여전히 같은 디렉토리에 있습니다./xampp/mysql/나는데이터내 이전 XAMPP의 디렉토리입니다.
  2. 그런 다음 mysql 서버를 시작했고 모든 것이 잘 진행되었습니다.

이것이 누군가에게 도움이 되기를 바랍니다!

답변3

이것은 MySQL 5.7이 설치된 Windows 10에서 수행한 작업입니다.

두 설치 모두 MySQL Installer를 사용하여 수행되었으므로 설정은 동일하고 다른 답변에 설명된 것과 약간 다릅니다.

기본적으로 원래 설치 폴더에서 관심 있는 스키마 이름을 딴 폴더만 복사했습니다. 다음으로 적용할 기본 설정은 폴더 속성 대화 상자의 보안 탭에 있습니다.

  • 기본 데이터 폴더와 모든 하위 폴더(방금 복사한 폴더 포함)의 소유권을 계정에 할당합니다 SYSTEM(관리자, 관리자 또는 복사에 사용된 사용자가 아님).
  • NETWORK SERVICE폴더에 대한 모든 권한을 가진 사용자에게 추가합니다 .

MySQL 포럼에서 이러한 지침을 찾았습니다. 원본 메시지는 다음과 같습니다.

Ray Yates의 원본 전체 지침:

후손을 위해:

  1. C:...\Data\ 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성 선택 -> 보안 - 고급을 선택하고 NETWORK SERVICE라는 주체를 확인했습니다.

  2. 별도의 창에서 E:\MYSQL\Data\ 폴더 복사본을 마우스 오른쪽 버튼으로 클릭했는데 그러한 설정이 없다는 것을 발견했습니다.

  3. I [추가] 버튼을 클릭한 후 주체 선택 링크를 클릭하고 개체 이름 NETWORK SERVICE를 입력한 후 [확인]을 클릭합니다.

  4. NETWORK SERVICE를 선택하고 [편집]을 클릭한 후 모든 권한 [확인]을 선택했습니다.

  5. 그런 다음 원래 단계를 모두 반복했고 서버가 예상대로 시작되었습니다.

관련 정보