2016-07-05 1 views
0

두 테이블이있는 데이터베이스를 쿼리하는 웹 응용 프로그램에서 작업하고 있습니다. 데이터 오염 문제가 있다고 생각합니다. 내 테이블 중 하나는 괜찮아요, 그리고 내가 그것을 버리고 그것을 백업했습니다. 필자는 파이썬 스크립트로 구문 분석 한 일부 MongoDB 데이터에서 데이터베이스를 채 웁니다.데이터 손상 문제를 해결하는 방법은 무엇입니까? 테이블에 SQL 쿼리를 실행할 수 없습니다.

HeidiSQL을 사용하여 데이터베이스에서 작업하고 my.ini에서 "innodb_force_recovery = 4"(읽기 전용 버전의 테이블을 만드는 것으로 생각됩니다)를 지정하지 않으면 손상된 테이블을 볼 수 없습니다. 그럼에도 불구하고, 나는 그 조건을 지정한 후에 테이블에서 mysqldump를 수행 할 수 없다.

그런 다음 HeidiSQL에 문제가있는 것 같았습니다. 그렇지 않았습니다. mysqld 커맨드 라인에서조차도, 나는 손상된 데이터베이스에 어떤 행동도 수행 할 수 없었다. 아래에 내가 가진 오류 메시지가 표시됩니다.

Error message in mysqld as viewed via command line

심지어 XAMPP 제어판을 시작할 때 다음과 같은 오류가 발생합니다 :

160705 14시 41분 34초 [ERROR] mysqld를 예외 0x80000003을 가지고; 이것은 사용자가 버그를 발견했기 때문일 수 있습니다. 이 바이너리 또는 링크 된 라이브러리 중 하나가 손상되었거나 부적절하게 작성되어 이거나 잘못 구성된 것일 수도 있습니다. 이 오류는 오작동하는 하드웨어로 인해 발생할 수도 있습니다.

so. 이 시점에서 파이썬 스크립트를 다시 실행할 수는 있지만 같은 오류가 발생한다고 가정합니다.

어떻게이 문제를 해결할 것을 권장합니까?

답변

0

테이블 스페이스가 손상되어 궁극적 인 목표는 덤프를 가져 와서 처음부터 InnoDB 테이블 스페이스를 다시 만드는 것입니다.

innodb_force_recovery=4으로 시작하면 모든 테이블을 하나씩 덤프합니다. 모든 데이터베이스와 모든 테이블을 반복하는 스크립트를 작성하십시오. --skip-lock-tablesmysqldump을 추가하십시오. 때때로 도움이됩니다.

그런 다음 innodb_force_recovery : 5와 6의 더 높은 값을 시도하십시오. MySQL을 크래쉬시킨 나머지 테이블을 innodb_force_recovery=4으로 덤프하십시오.

여전히 테이블을 덤프 할 수없는 경우 "percona 데이터 복구 툴킷"또는 "undrop-for-innodb"에 대해 Google을 선택하십시오. 이 툴들은 모두 저수준의 InnoDB 테이블 스페이스와 함께 작동하며 손상된 영역을 건너 뛰는 InnoDB 페이지의 레코드를 가져올 수 있습니다.

모든 덤프가있는 경우 모든 innodb 파일 (ibdata1, ib_logfile * 및 * .ibd가있는 경우)을 제거하고 덤프를 가져옵니다.

+0

답변 해 주셔서 감사합니다. 나는 MySQL에서 스크립트를 작성한 적이 없으므로 나중에 시도해 볼 것입니다 :). mysqldump는 어떤 용량의 테이블에도 접근 할 수 없기 때문에 작동 할까 의심 스럽습니다. mysqld가 즉시 충돌합니다. 나는 "percona 데이터 복구 툴킷"과 "undrop-for-innodb"을 살펴볼 것입니다. – ksani

+0

쉘 스크립트입니다. 'for d $와 같은 것 (mysql -NBe 'show databases'); t를 $ (mysql -NBe 'show tables'$ d)로해라; mysqldump --skip-lock-tables $ d $ t> $ d- $ t.sql; 끝난; 다. 행운을 빕니다. – akuzminsky

관련 문제