
MySQL에서 손상된 테이블을 복구하는 방법
2022-06-01 last update
5 minutes reading Ubuntu MySQL Databases Ubuntu 18.04때때로 MySQL 테이블이 손상될 수 있습니다. 이것은 오류가 발생했고 저장된 데이터를 읽을 수 없다는 것을 의미합니다.손상된 테이블을 읽으려면 서버가 충돌합니다.
시계 파손의 흔한 원인은 다음과 같다. MySQL 서버가 쓰기 중에 중지됩니다. 외부 프로그램이 서버를 수정하는 동시에 수정한 표. 기계가 의외로 정지되었다. 컴퓨터 하드웨어에 장애가 발생했습니다. MySQL 코드에서 소프트웨어 오류가 발생했습니다. 만약 어떤 시계가 파손되었다고 의심된다면, 고장을 제거하거나 이 시계를 복구하기 전에 데이터 디렉터리를 백업해야 한다.따라서 데이터 손실 위험을 최소화할 수 있습니다.
먼저 MySQL 서비스를 중지합니다.
다른 한편, 파손된 시계가 사용된다면 InnoDB storage engine 그것을 복구하는 과정은 달라질 것이다.InnoDB는 버전 5.5부터 MySQL의 기본 스토리지 엔진으로 자동 손상 확인 및 복구 기능을 제공합니다.InnoDB는 읽은 각 페이지에서 확인 및 손상된 페이지를 확인하여 확인 및 부적합이 발견되면 MySQL 서버를 자동으로 중지합니다.
InnoDB 테이블을 복구할 필요가 거의 없습니다. InnoDB는 충돌 복구 메커니즘을 가지고 있기 때문에 서버가 다시 시작될 때 대부분의 문제를 해결할 수 있습니다.그러나 손상된 InnoDB 테이블을 재구성해야 하는 경우 MySQL 문서에서 사용하는 것이 좋습니다“Dump and Reload” method.이것은 손상된 테이블에 대한 접근권을 다시 얻고
이 점을 고려하여 MySQL 서비스를 다시 시작하여 서버에 액세스할 수 있는지 확인하십시오.
/etc/mysql/mysql.conf.d/mysqld.회사 명
시계 파손의 흔한 원인은 다음과 같다.
먼저 MySQL 서비스를 중지합니다.
- sudo systemctl stop mysql
그리고 모든 데이터를 새 백업 디렉터리로 복사합니다.Ubuntu 시스템의 기본 데이터 디렉토리는 다음과 같습니다.- cp -r /var/lib/mysql /var/lib/mysql_bkp
백업이 완료되면 실제로 어떻게 손상되었는지 조사표를 시작할 수 있습니다.테이블MyISAM storage engine을 사용하는 경우 MySQL 프롬프트에서 /var/lib/mysql/
문을 실행하여 손상 여부를 확인할 수 있습니다.- CHECK TABLE table_name;
이 문장의 출력에 손상되었는지 알 수 있는 메시지가 표시됩니다.MyISAM 테이블이 손상된 경우 일반적으로 CHECK TABLE
문을 통해 수정할 수 있습니다.- REPAIR TABLE table_name;
복구가 성공적으로 완료되면 다음과 같은 메시지가 출력에 표시됩니다.Output+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+
그러나 테이블이 여전히 손상된 경우 MySQL 문서에 대한 권장 사항이 있습니다alternative methods for repairing corrupted tables.다른 한편, 파손된 시계가 사용된다면 InnoDB storage engine 그것을 복구하는 과정은 달라질 것이다.InnoDB는 버전 5.5부터 MySQL의 기본 스토리지 엔진으로 자동 손상 확인 및 복구 기능을 제공합니다.InnoDB는 읽은 각 페이지에서 확인 및 손상된 페이지를 확인하여 확인 및 부적합이 발견되면 MySQL 서버를 자동으로 중지합니다.
InnoDB 테이블을 복구할 필요가 거의 없습니다. InnoDB는 충돌 복구 메커니즘을 가지고 있기 때문에 서버가 다시 시작될 때 대부분의 문제를 해결할 수 있습니다.그러나 손상된 InnoDB 테이블을 재구성해야 하는 경우 MySQL 문서에서 사용하는 것이 좋습니다“Dump and Reload” method.이것은 손상된 테이블에 대한 접근권을 다시 얻고
REPAIR TABLE
유틸리티를 사용하여 테이블을 만드는 logical backup 과 관련된다. 이것은 테이블 구조와 그 중의 데이터를 보존한 다음에 테이블을 데이터베이스로 다시 불러옵니다.이 점을 고려하여 MySQL 서비스를 다시 시작하여 서버에 액세스할 수 있는지 확인하십시오.
- sudo systemctl restart mysql
서버가 여전히 충돌하거나 액세스할 수 없는 경우 InnoDB를 활성화하는 mysqldump
옵션이 도움이 될 수 있습니다.이 작업은 파일force_recovery
을 편집하여 수행할 수 있습니다.- sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
mysqld.cnf
섹션에서 다음 행을 추가합니다./etc/mysql/mysql.conf.d/mysqld.회사 명
. . .
[mysqld]
. . .
innodb_force_recovery=1
파일을 저장하고 닫은 다음 MySQL 서비스를 다시 시작하십시오.파손된 테이블에 성공적으로 접근할 수 있다면[mysqld]
유틸리티를 사용하여 테이블 데이터를 새 파일로 저장하십시오.이 파일을 임의로 명명할 수 있지만, 여기에서 우리는 이 파일을 mysqldump
로 명명합니다.- mysqldump database_name table_name > out.sql
그리고 데이터베이스에서 이 테이블을 삭제합니다.ySQL 프롬프트를 다시 열지 않으려면 다음 구문을 사용할 수 있습니다.- mysql -u user -p --execute="DROP TABLE database_name.table_name"
다음은 방금 만든 덤프 파일 복원 테이블을 사용합니다.- mysql -u user -p < out.sql
일반적으로 InnoDB 스토리지 엔진은 이전 MyISAM 엔진보다 내결함성이 높습니다.InnoDB를 사용하는 시계는 여전히 파손될 수 있지만 auto-recovery features 때문에 시계 파손과 붕괴 위험이 현저히 낮아진다.