How to Repair Corrupt MySQL Database Tables Step-by-Step

현재 시대의 기업은 특정 데이터베이스 서버 플랫폼에 묶여 있지 않습니다. 중간 수준의 工作中的과 고 가용성과 재생성 대처를 처리할 수 있는 많은 데이터베이스 플랫폼이 사용할 수 있습니다. MySQL는 많은 기능과 高性能을 제공하는 이러한 데이터베이스 플랫폼 중 하나입니다.

다른 RDBMS과 마찬가지로 MySQL도 데이터베이스 및 테이블 ruction에 Susceptible하입니다. Microsoft과 CrowdStrike로부터 인스턴트 停電가 발생했던 最近의 停電 현상도 MySQL 데이터베이스 서버에 영향을 주었습니다. 운영체제의 실패로 인해 데이터베이스의 테이블이나 전체 데이터베이스가 corruption되는 것입니다.

이 篇文章에서는 우리가 MySQL 데이터베이스의 테이블을 어떻게 corruption하고 修正할 수 있는지 보여드릴 것입니다. 이 篇文章은 DBAs가 실제 문제를 시뮬레이션하고 이러한 MySQL 테이블의 문제를 해결하는 가장 좋은 방법을 결정하도록 도울 수 있습니다.

MySQL 데이터베이스 ruption 이해

MySQL 데이터베이스의 ruption은 다양한 방법으로 나타날 수 있으며 이에 대한 예를 다음과 같습니다:

테이블 접근 불가

전체 테이블이나 특정 자리 subset이 접근할 수 없게 되었습니다. 이러한 ruption된 테이블에 접근하려고 하면 이러한 테이블의 인덱스 파일이나 데이터 파일의 ruption이 발생한 것을 나타내는 에러를 겪게 됩니다.

데이터 일관성 에러

이 테이블이 훔치기 전에, 의미있는 데이터를 대신 一些 가bage 값을 리턴하거나, 일관성이 없거나, 결과가 compete 하지 않을 수 있습니다.

예기치 않은 꺼내

某些 情况下, MySQL은 테이블 접근 또는 mysqldump을 사용하여 备份 실행 중에 崩壊할 수 있습니다. 이러한 에러를 시뮬레이션 과정에서 한번 만난 적이 있습니다. 테이블의 데이터 파일을 훔치고 있었습니다. 서비스를 시작한 후, SELECT 구문을 사용하여 테이블에 접근하면 MySQL 서비스가 자동으로 崩壊합니다.

데이터 베이스 操作 시 에러 메시지

훔치기 전 테이블에 접근할 때, 다음과 같은 에러들을 만날 수 있습니다.:

Plain Text

 

이러한 에러는 데이터 파일이나 관련 인덱스 파일이 훔치기 되었음을 나타냅니다.

훔치기의 根本原因을 이해하는 것은 未来 발생을 예방하고 데이터 무결성을 보장하는 중요한 것입니다.

MySQL 테이블 수정 전 前提

수정 시도 전에 다음을 확인하십시오.:

  • MySQL 데이터 베이스의 完全한 备份
  • 충분한 디스크 공간
  • MySQL 서버에 관리자 접근 권한

이제, 테이블 훔치기를 시뮬레이션합시다.

MySQL 테이블 훔치기

우선 데이터베이스를 수정하는 과정을 배우기 전에, 데이터베이스를 왜 ruption하는지 이해해봐요. 示例을 위해서는 MySQL 데이터베이스 서버上에 “CorruptDB”라는 데이터베이스를 만들었습니다. CorruptDB 데이터베이스内에 corrupt_table라는 테이블을 또 만들었습니다.

다음은 데이터베이스와 테이블을 만들기 위한 코드입니다.

MySQL

 

이제 다음 쿼리를 실행하여 테이블に 100만 개의 레코드를 추가했습니다.

MySQL

 

이 시뮬레이션은 laptop 上에서 실행되었으며, 생산, 開発 또는 다른 환경에서 이 것을 시도하지 마십시오. 이 示例에서 사용하는 테이블은 MyISAM 데이터베이스 엔진으로 생성되었습니다. Alternative Storage Engines에 대해 더 많은 정보를 얻을 수 있습니다.

다음과 같은 과정을 통해 테이블을 ruption 시켰습니다.

단계 1: MySQL 서버 서비스 중지

MySQL 서버를 중지해야 합니다. 그렇기 때문에 PowerShell을 관리자 권한으로 실행하고 다음 명령을 실행합니다.

Plain Text

 

또는, 서비스를 사용해서 중지할 수 있습니다.

단계 2: 테이블의 인덱스 파일 ruption

이제 테이블의 인덱스 파일을 ruption 해야 합니다. MyISAM 데이터베이스 엔진을 사용하여 테이블을 생성할 때, 테이블을 생성할 때 세 가지 파일이 생성되는 것을 기억하세요.

  • MYD 파일: 이 파일은 실제 데이터를 포함합니다.
  • MYI 파일: 이 파일은 인덱스 파일입니다.
  • Frm 파일: 이 파일은 테이블 구조를 포함합니다.

우리는 인덱스 파일을 훔치ます. 데이터 파일은 기본적으로 “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb”로 위치하고 있습니다. 훔치는 것으로는 헥스 에디터를 사용합니다.

헥스 에디터를 다운로드하고 설치하십시오. 이를 사용하여 MYI 파일을 열어봅니다. 이 파일은 다음과 같은 이미지처럼 보입니다:

첫 五行을 一些 랜덤한 값으로 替え십시오. 파일을 저장하고 에디터를 닫으십시오.

이제, 서비스를 시작하고 테이블에 アクセス하도록 하겠습니다.

阶段的 3: MySQL 서비스 시작 및 테이블 액세스

まず, PowerShell에서 다음 명령을 실행하여 MySQL 서비스를 시작하십시오.

Plain Text

 

서비스가 시작되면, MySQL 명령行에서 다음 쿼리를 실행하십시오.

MySQL

 

쿼리는 다음과 같은 에러를 돌려냈습니다:

에러는 corrupt_table의 인덱스가 훔쳐지고 수정되야 하는 것을 나타냅니다.

MySQL 테이블 수정 수동 方法

훔쳐진 MySQL 테이블을 수정할 수 있는 certe methods가 있습니다. 첫 번째 方法은 테이블을 검사하고 수정하는 명령어를 사용하는 것입니다.

검사 테이블과 수정 테이블 명령어

MySQL의 내장 명령어 CHECK TABLEREPAIR TABLE를 사용하여 테이블을 restaur할 수 있습니다. 이 명령어는 MyISAM 테이블에 대한 任何事情 검사와 수정을 行います.

張表命令어 (check table command) 표면 表 정합성을 검사하며, 表 구조, 인덱스, 그리고 데이터의 어려움을 검사하고 상세 정보를 보여줍니다. 문법은 아래와 같습니다.

Plain Text

 

다양한 옵션을 지정할 수 있습니다.

  1. QUICK: 이 옵션은 어려움을 빠르게 검사하고 인덱스가 flawed 인 것을 식별합니다.
  2. FAST: 이 옵션은 정상적으로 닫혀있지 않은 表를 검사합니다.
  3. CHANGED: 이 옵션은 마지막 CHECK TABLE 실행 이후에 변경된 表들만 검사합니다.
  4. MEDIUM: 이 옵션은 레코드를 검사하고 表와 데이터 사이의 연결이 corrective 인지 확인합니다.
  5. EXTENDED: 이 옵션은 表 구조와 내용을 깊이 있게 스캔하고 확인합니다.

이 demp 에서는 빠른 스캔을 실행할 것입니다. 아래는 명령어입니다.

Plain Text

 

스크린샷:

상단 스크린샷에서 에러는 corrupt_table 인덱스가 flaws 되어 수정이 필요하다고 표시합니다.

우리는 REPAIR TABLE 명령어를 이용하여 表의 어려움을 수정할 것입니다. REPAIR TABLE 명령어는 MyISAM 데이터 베이스 엔진의 表의 구조와 데이터를 어려움에 의해 복구합니다. 表의 인덱스가 어려움이 되었다면, REPAIR TABLE 명령어가 인덱스를 다시 構築합니다.

REPAIR TABLE 명령어의 문법은 다음과 같습니다.

Plain Text

 

다음과 같은 옵션을 지정할 수 있습니다.

  • QUICK: 이 옵션은 表의 인덱스 파일만 수정하며 表의 데이터 파일을 접근하지 않습니다.
  • 확장: 이 옵션을 사용할 때, 명령어는 긍정적인 수정을 执行할 것입니다. 또한 모든 레코드를 스캔하여 인덱스 파일을 수정하거나 재생성할 것입니다.

이 데모에서는 테이블의 인덱스를 ruption하였으므로, 快速 옵션을 사용할 것입니다. 다음과 같은 명령어를 실행하십시오.

Plain Text

 

스크린샷:

上面的 스크린샷을 보면, corrupt_table가 성공적으로 수정되었음을 볼 수 있습니다. 확인하려면 MySQL Workbench에서 다음 쿼리를 실행하십시오.

MySQL

 

쿼리 출력:

正如你所 see, 이제 테이블이 사용 가능합니다.

mysqldump 명령어를 사용하여 테이블 복구

第二种方法是从备份中恢复整个表。 当表严重损坏且无法通过使用 REPAIR TABLE 命令进行 repair 时,可以使用此方法。

要从 MySQL 表的备份中恢复,我们可以使用 mysqldump 命令。 你可以阅读文章 “mysqldump — A Database Backup Program” 以了解更多关于如何使用 mysqldump 命令的信息。 恢复表的语法如下。

MySQL

 

在语法中:

  • Username: 连接到 MySQL 数据库时使用的用户名。
  • -p: 指定密码。 如果你保持空着,MySQL 会提示你输入密码。
  • [database_name]: 指定你要恢复表的数据库名称。
  • Table_dump.sql: 备份文件的完全限定名を指定します。

デモのために、私はCorruptDBデータベースの备份を取りました。备份はC:\MySQLData\Backupディレクトリにあります。

corrupt_tableを復元するために、以下のコマンドを使用できます。

MySQL

 

コマンドが成功して実行されると、テーブルにアクセスすることができます。以下のクエリを実行して確認しましょう。

MySQL

 

クエリの出力:

上のスクリーンショットをご覧ください。テーブルは正常に復元されました。

phpMyAdminを使用する

phpMyAdminツールを使用して、壊れたMySQLデータベースを修復することもできます。phpMyAdminは、MySQLおよびMariaDBを管理したり維持したりするグラフィカルなユーザーインターフェースです。デモのために、私はラップトップにインストールしました。

  • テーブルを修復するには、phpMyAdminを起動して、壊れたテーブルが存在するデータベースに移動します。
  • 右側のパネルに、CorruptDBデータベースで作成されたテーブルの一覧が表示されます。
  • Corrupt_tableを一覧から選択し、下拉ボックスからテーブルを修復するオプションを選択します。

以下は参照用のスクリーンショットです。

テーブルが修復され次第、corrupt_tableの状態がOKになります。以下はスクリーンショットです。

結論

이 記事で는 MySQL 데이터베이스 ragmentation 的 인지 가능한 原因을 배웠고, 그들을 수정하는 방법을 배웠습니다. 이를 위해 하EXE editor를 사용하여 MySQL 테이블을 手脚하는 단계별 과정을 설명했습니다. CHECK TABLEREPAIR TABLE 명령어를 사용하여 수정하는 방법을 다룹니다. 또한 mysqldump 도구를 사용하여 테이블을 恢复하는 방법을 배웠습니다.

ragmented MySQL 데이터베이스 테이블을 수정하는 것은 어려울 수 있지만, correct 툴과 방법을 사용하면 수행할 수 있습니다. 수동 방법은 기본적인 솔루션을 제공하고, phpMyAdmin은 일반적이고 신뢰할 수 있는 恢复 옵션을 제공합니다. 정기적인 备份을 하고 데이터베이스 상태를 관리하여 ragmentation의 위험을 최소화하십시오.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step