رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش رفع خرابی (Corruption) جدول‌ها در MySQL

آموزش رفع خرابی (Corruption) جدول‌ها در MySQL

پایگاه داده
3 دقیقه مطالعه

گاهی جدول‌های MySQL دچار خرابی (Corruption) می‌شوند. یعنی داده‌های داخل جدول دیگر قابل خواندن نیستند و در بعضی موارد حتی تلاش برای خواندن آن‌ها می‌تواند باعث کرش کردن سرور MySQL شود.

گاهی جدول‌های MySQL دچار خرابی (Corruption) می‌شوند. یعنی داده‌های داخل جدول دیگر قابل خواندن نیستند و در بعضی موارد حتی تلاش برای خواندن آن‌ها می‌تواند باعث کرش کردن سرور MySQL شود.

دلایل رایج خراب شدن جدول‌ها:

  • توقف MySQL وسط عملیات نوشتن

  • تغییر جدول توسط برنامه‌ای دیگر همزمان با کار سرور

  • خاموش شدن ناگهانی سیستم

  • خرابی سخت‌افزار

  • باگ نرم‌افزاری در MySQL

قبل از هر کاری، بکاپ بگیرید. بدون بکاپ جلو رفتن یعنی علاقه عجیب به فاجعه.


مرحله اول: گرفتن نسخه پشتیبان

ابتدا سرویس MySQL را متوقف کنید:

sudo systemctl stop mysql
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در بعضی توزیع‌ها نام سرویس ممکن است mysqld باشد.

سپس از پوشه داده‌ها کپی بگیرید (مسیر پیش‌فرض در اوبونتو):

cp -r /var/lib/mysql /var/lib/mysql_bkp
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

حالا اگر اوضاع بدتر شد، حداقل چیزی برای برگشت دارید.


بررسی خرابی جدول‌های MyISAM

اگر جدول از موتور MyISAM استفاده می‌کند:

  1. سرویس را دوباره اجرا کنید:

sudo systemctl start mysql
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
  1. وارد MySQL شوید و جدول را بررسی کنید:

CHECK TABLE table_name;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر جدول خراب باشد، در خروجی مشخص می‌شود.

تعمیر جدول MyISAM

REPAIR TABLE table_name;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر موفق باشد، خروجی چیزی شبیه این است:

status | OK
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر تعمیر نشد، باید از روش‌های پیشرفته‌تر که در مستندات MySQL آمده استفاده شود.


جدول‌های InnoDB (حالت رایج امروزی)

از MySQL 8 به بعد، موتور پیش‌فرض InnoDB است. خوشبختانه InnoDB نسبت به MyISAM خیلی مقاوم‌تر است.

ویژگی‌ها:

  • بررسی خودکار خرابی

  • مکانیزم Crash Recovery

  • توقف خودکار سرور در صورت تشخیص خطای جدی

بیشتر مواقع فقط با ریستارت مشکل حل می‌شود:

sudo systemctl restart mysql
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر MySQL بالا نمی‌آید

می‌توان حالت بازیابی اجباری InnoDB را فعال کرد.

فایل تنظیمات را باز کنید:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در بخش [mysqld] این خط را اضافه کنید:

innodb_force_recovery=1
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

سپس سرویس را ریستارت کنید.

اگر با مقدار 1 بالا نیامد، می‌توان اعداد بالاتر (تا 6) را امتحان کرد، اما هرچه عدد بالاتر باشد، محدودیت‌ها بیشتر می‌شود.


روش اصلی تعمیر InnoDB: Dump و Reload

اگر جدول InnoDB خراب شده، روش توصیه‌شده:

1. خروجی گرفتن از جدول

mysqldump database_name table_name > out.sql
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

2. حذف جدول خراب

mysql -u user -p --execute="DROP TABLE database_name.table_name"
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

3. بازگردانی جدول

mysql -u user -p < out.sql
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در این روش، ساختار جدول و داده‌ها دوباره از فایل دامپ ساخته می‌شوند.


مقایسه MyISAM و InnoDB

ویژگیMyISAMInnoDB
مقاومت در برابر خرابیکمبالا
بازیابی خودکارندارددارد
ریسک کرشبیشترکمتر
پیشنهاد برای پروژه جدید❌✅

جمع‌بندی

خرابی جدول در MySQL اتفاقی است که دیر یا زود سراغ هر مدیر سروری می‌آید. ترتیب درست کار:

  1. بکاپ بگیرید

  2. نوع موتور جدول را مشخص کنید

  3. برای MyISAM از REPAIR TABLE

  4. برای InnoDB بیشتر مواقع ریستارت کافی است

  5. در موارد جدی از روش Dump & Reload استفاده کنید

مدیریت درست بکاپ و استفاده از InnoDB می‌تواند احتمال فاجعه را به شدت کم کند.

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS