گاهی جدولهای MySQL دچار خرابی (Corruption) میشوند. یعنی دادههای داخل جدول دیگر قابل خواندن نیستند و در بعضی موارد حتی تلاش برای خواندن آنها میتواند باعث کرش کردن سرور MySQL شود.
دلایل رایج خراب شدن جدولها:
-
توقف MySQL وسط عملیات نوشتن
-
تغییر جدول توسط برنامهای دیگر همزمان با کار سرور
-
خاموش شدن ناگهانی سیستم
-
خرابی سختافزار
-
باگ نرمافزاری در MySQL
قبل از هر کاری، بکاپ بگیرید. بدون بکاپ جلو رفتن یعنی علاقه عجیب به فاجعه.
مرحله اول: گرفتن نسخه پشتیبان
ابتدا سرویس MySQL را متوقف کنید:
در بعضی توزیعها نام سرویس ممکن است mysqld باشد.
سپس از پوشه دادهها کپی بگیرید (مسیر پیشفرض در اوبونتو):
حالا اگر اوضاع بدتر شد، حداقل چیزی برای برگشت دارید.
بررسی خرابی جدولهای MyISAM
اگر جدول از موتور MyISAM استفاده میکند:
-
سرویس را دوباره اجرا کنید:
-
وارد MySQL شوید و جدول را بررسی کنید:
اگر جدول خراب باشد، در خروجی مشخص میشود.
تعمیر جدول MyISAM
اگر موفق باشد، خروجی چیزی شبیه این است:
اگر تعمیر نشد، باید از روشهای پیشرفتهتر که در مستندات MySQL آمده استفاده شود.
جدولهای InnoDB (حالت رایج امروزی)
از MySQL 8 به بعد، موتور پیشفرض InnoDB است. خوشبختانه InnoDB نسبت به MyISAM خیلی مقاومتر است.
ویژگیها:
-
بررسی خودکار خرابی
-
مکانیزم Crash Recovery
-
توقف خودکار سرور در صورت تشخیص خطای جدی
بیشتر مواقع فقط با ریستارت مشکل حل میشود:
اگر MySQL بالا نمیآید
میتوان حالت بازیابی اجباری InnoDB را فعال کرد.
فایل تنظیمات را باز کنید:
در بخش [mysqld] این خط را اضافه کنید:
سپس سرویس را ریستارت کنید.
اگر با مقدار 1 بالا نیامد، میتوان اعداد بالاتر (تا 6) را امتحان کرد، اما هرچه عدد بالاتر باشد، محدودیتها بیشتر میشود.
روش اصلی تعمیر InnoDB: Dump و Reload
اگر جدول InnoDB خراب شده، روش توصیهشده:
1. خروجی گرفتن از جدول
2. حذف جدول خراب
3. بازگردانی جدول
در این روش، ساختار جدول و دادهها دوباره از فایل دامپ ساخته میشوند.
مقایسه MyISAM و InnoDB
| ویژگی | MyISAM | InnoDB |
|---|---|---|
| مقاومت در برابر خرابی | کم | بالا |
| بازیابی خودکار | ندارد | دارد |
| ریسک کرش | بیشتر | کمتر |
| پیشنهاد برای پروژه جدید | ❌ | ✅ |
جمعبندی
خرابی جدول در MySQL اتفاقی است که دیر یا زود سراغ هر مدیر سروری میآید. ترتیب درست کار:
-
بکاپ بگیرید
-
نوع موتور جدول را مشخص کنید
-
برای MyISAM از
REPAIR TABLE -
برای InnoDB بیشتر مواقع ریستارت کافی است
-
در موارد جدی از روش Dump & Reload استفاده کنید
مدیریت درست بکاپ و استفاده از InnoDB میتواند احتمال فاجعه را به شدت کم کند.

