MySQL은 가장 인기 있는 오픈 소스 RDBMS (관계형 데이터베이스 관리 시스템) 중 하나입니다. 이는 빠르게 성장하고 있는 LAMP Stack의 필수적인 부분이며 개발자와 시스템 관리자 사이에서 인상적인 팬덤을 얻었습니다. 비관계형 데이터베이스와 비교하여, SQL은 데이터를 효과적으로 정리, 저장 및 관리할 수 있는 뛰어난 기능을 제공합니다. SQL 데이터베이스의 차별화된 테이블 정리 기능과 뛰어난 성능은 대기업과 중소기업을 막론하고 조직의 모든 수준에서 선호하는 선택이 되도록 합니다.
MySQL 테이블은 드물게 손상될 수 있으며, 이는 그러한 오류가 발생하여 그 안에 저장된 데이터를 읽을 수 없음을 나타냅니다. 손상된 테이블에서 데이터를 읽으려고 하면 서버가 다운되고 오류 또는 오류 목록이 발생합니다.
MySQL 테이블 손상의 잠재적 원인
다음은 테이블이 손상되는 가장 전형적인 원인 중 일부입니다:
- 재부팅 후 MySQL 서비스가 중단됩니다.
- 정전으로 인해 시스템이 예기치 않게 꺼집니다.
- 불량 메모리 또는 하드웨어 오류.
- 소프트웨어 버그가 OS 또는 SQL 코드에 있습니다.
- 쓰기 작업 중에 MySQL이 종료됩니다.
- 시스템이 OFF 상태가 됩니다(SQL 업데이트 중).
손상된 것으로 의심되는 테이블을 복구하기 전에 정보 디렉터리의 백업을 생성하십시오. 이렇게 하면 데이터 손실 가능성을 줄이는 데 도움이 됩니다. 이 빠른 가이드에서는 MySQL에서 손상된 테이블을 복구하는 문제 해결 단계를 안내해 드립니다.
전제 조건
이 튜토리얼을 따라 하려면 다음이 필요합니다:
- 최신 버전의 Ubuntu가 설치됨 (시스템에).
- 시스템 사용자는 sudo 권한이 있어야 합니다..
- sudo 계정에 액세스하는 데 어려움이 있는 경우, 다음을 변경하는 것을 고려해 보십시오: MySQL root 비밀번호.
- MySQL 설정 (서버에).
1단계: MySQL 서비스 중지 및 데이터 백업
먼저, 다음 명령어를 사용하여 MySQL 서비스를 중지합니다: systemctl 명령어:
|
1 |
sudo systemctl stop mysql |
SQL 서비스를 중지한 후, 다음 단계는 기존의 모든 파일을 새 디렉터리로 백업하는 것입니다. Ubuntu의 기본 데이터 디렉터리인 /var/lib/mysql/를 사용하여 모든 시스템 데이터를 복사합니다:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
2단계: 오류 식별
다음으로, 조사를 시작하여 손상된 테이블을 식별합니다. 테이블이 MyISAM storage engine을 사용하는 경우, CHECK TABLE 문을 사용하여 테이블의 상태를 확인합니다:
|
1 |
mysql> CHECK TABLE table_name; |
출력으로 손상된 테이블을 확인하는 메시지가 표시됩니다.
3단계: 손상된 테이블 복구
만약 MyISAM 테이블에 오류가 있고 이를 식별했다면, REPAIR TABLE 문을 사용하여 오류를 수정합니다:
|
1 |
mysql> REPAIR TABLE table_name; |
복구에 성공하면 출력으로 다음과 같은 오류 없는 메시지가 표시됩니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
출력: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
그러나 오류가 다시 발생하는 경우, MySQL 버전 8.0 공식 문서를 따라 테이블을 재구축하거나 복구하십시오.
와 달리, MyISAM storage engine에서 테이블을 복구하는 데 관여하는 InnoDB 프로세스는 InnoDB storage engine에서 다릅니다. InnoDB는 MySQL 8.0의 기본 스토리지 엔진입니다. 자동 손상 검사 및 복구 작업을 특징으로 합니다. MySQL InnoDB는 읽는 모든 페이지에 대해 체크섬을 수행하여 손상된 페이지를 확인합니다. 불일치가 감지되면 MySQL 서버를 자동으로 중지합니다.
결론적으로 InnoDB 테이블을 복구해야 하는 경우는 거의 없습니다. InnoDB는 재시작을 통해 대부분의 문제를 해결할 수 있는 충돌 복구 메커니즘을 갖추고 있습니다.
MySQL 서비스를 재시작하여 서버에 액세스할 수 있는지 확인해 보십시오:
|
1 |
sudo systemctl restart mysql |
재부팅 후에도 손상된 InnoDB 테이블을 재구축하는 데 실패하면, MySQL 문서에서 제안하는 “덤프 및 재로드” 방법을 시도해 보세요. 이 방법은 mysqldump 유틸리티를 사용하여 손상된 테이블에 대한 액세스를 다시 확보하는 과정을 포함합니다. 테이블의 논리적 백업을 저장하고 유지하기 위한 폴더를 생성해야 합니다. 오류가 해결되면 테이블을 데이터베이스로 다시 로드합니다.
4단계: innodb_force_recovery 옵션 활용
서버가 계속 다운되어 있거나 연결할 수 없는 경우, InnoDB의 force_recovery 옵션을 사용해 보세요. ON으로 force_recovery 옵션을 설정하는 것은 MySQL 데이터베이스를 복구하는 훌륭한 방법입니다. mysqld.cnf 파일을 nano 텍스트 편집기에서 수정하여 이 옵션을 활성화할 수 있습니다:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
다음 줄을 [mysqld] 섹션 아래에 삽입하세요:

MySQL 서비스를 재부팅한 후 파일을 저장하고 닫습니다.
5단계: mysqldump 파일 생성
손상된 테이블에 액세스할 수 있는 경우, mysqldump 옵션을 사용하여 모든 덤프를 새 파일에 저장합니다. 새 파일의 이름은 원하는 대로 지정하고 끝에 .sql 확장자를 추가해야 합니다. 여기서는 파일 이름을 demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
그 후, DROP TABLE 쿼리를 사용하여 데이터베이스에서 테이블을 제거합니다. MySQL 프롬프트를 다시 열 필요가 없도록 다음 구문을 사용할 수 있습니다:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
그런 다음, 방금 준비한 덤프 문서 demo.sql을 사용하여 테이블을 복구합니다:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
MySQL 손상된 테이블을 성공적으로 복구했으며, 이제 데이터베이스를 원활하게 사용할 준비가 되었습니다.
결론
대용량 데이터를 다루는 경우 테이블 손상이나 예기치 않은 시스템 다운이 발생할 가능성이 높습니다. MySQL InnoDB 스토리지 엔진은 이전의 MyISAM 엔진보다 결함 허용성이 더 높다는 점을 언급할 가치가 있습니다. InnoDB 스토리지 엔진을 사용하는 테이블도 여전히 손상될 수 있지만, 자체 자동 복구 기능.
덕분에 테이블 손상 및 고장의 위험이 크게 줄어듭니다. 마지막으로, 저희 블로그에서 데이터베이스에 관한 다양한 주제와 튜토리얼을 확인하실 수 있습니다.:
즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.