كيفية إصلاح الجداول التالفة في ماي إس كيو إل

Fix Corrupted Tables in MySQL Ubuntu Red hat CentOS Debian

مقدمة

MySQL هو واحد من أشهر أنظمة إدارة قواعد البيانات العلائقية مفتوحة المصدر. إنه يقوم بتشغيل العديد من تطبيقات الويب والمواقع التي نستخدمها يومياً. ومع ذلك، مثل أي نظام قاعدة بيانات، قد يواجه MySQL أحيانًا أخطاء تؤدي إلى تلف البيانات.

تحدث جداول MySQL التالفة عندما تصبح بيانات الجدول غير قابلة للقراءة أو غير صالحة. ويحدث هذا عادةً بسبب إيقافات غير متوقعة أو أعطال في الأجهزة أو أخطاء برمجية أو تعديلات غير مصرح بها لبيانات الجدول. تؤدي الجداول التالفة إلى تعطل النظام عند محاولة MySQL قراءة البيانات غير الصالحة أو كتابة إليها.

لحسن الحظ، يوفر MySQL آليات لاكتشاف التلف وإعادة بناء الجداول التالفة. تعتمد الطرق الدقيقة على ما إذا كانت الجداول التالفة تستخدم محرك التخزين MyISAM أو InnoDB.

سنغطي في هذا الدليل:

  • الأسباب الشائعة لتلف جداول MySQL
  • كيفية التحقق من تلف جداول MyISAM وإصلاحها
  • استعادة جداول InnoDB باستخدام النسخ الاحتياطي والاستعادة
  • تمكين وضع الاسترداد القسري في InnoDB

إن فهم تقنيات الاستعادة هذه يمكن أن يساعدك على تقليل وقت التوقف وفقدان البيانات عند مواجهة جداول MySQL تالفة.

أسباب تلف جداول MySQL

تشمل بعض الأحداث الشائعة التي قد تؤدي إلى تلف الجداول:

  • إيقافات غير متوقعة – إذا تعطل خادم قاعدة البيانات أو فقد الطاقة أثناء عملية كتابة، فقد تؤدي عمليات الكتابة غير المكتملة إلى تلف البيانات.
  • أعطال الأجهزة – يمكن أن تؤدي الذاكرة العشوائية المعيبة أو أقراص الأقراص الصلبة أو أجهزة أخرى إلى حدوث أخطاء في البيانات.
  • أخطاء برمجية – يمكن أن تؤدي الأخطاء في شفرة MySQL أو البرامج الأخرى التي تتفاعل مع قاعدة البيانات إلى حدوث تلف.
  • تعديلات بيانات غير مصرح بها – تخاطر المستخدمون أو التطبيقات التي تعدل ملفات بيانات MySQL مباشرةً بدلاً من استخدام واجهة برمجة التطبيقات لقاعدة البيانات بحدوث تلف.
  • مشاكل نظام التشغيل – يمكن أن تؤدي الأخطاء وانهيارات نظام التشغيل الأساسي ومشاكل الأذونات أيضًا إلى تلف الجداول.
  • إرهاق خادم قاعدة البيانات – يمكن أن يؤدي الحمل الثقيل واستنفاد الموارد إلى فشل MySQL في كتابة البيانات بشكل صحيح.

تقلل الإدارة الجيدة لقاعدة البيانات والأجهزة الموثوقة والبرمجيات القوية من فرص حدوث تلف. ولكن لا تزال مشاكل سلامة البيانات قد تحدث أحيانًا على الرغم من أفضل الممارسات.

التحقق من تلف جداول MyISAM وإصلاحها

كان محرك التخزين MyISAM هو الافتراضي في الإصدارات القديمة من MySQL. يستخدم MyISAM قفل على مستوى الجدول ويخزن البيانات والفهارس في ملفات منفصلة.

تدعم جداول MyISAM التحقق المباشر من التلف وإصلاحه. عند الاشتباه في وجود تلف، تأكد من ذلك عن طريق تشغيل CHECK TABLE:

CHECK TABLE tablename;

سيقوم هذا بفحص الجدول وكشف أي مشاكل تلف. إذا وُجد تلف، استخدم REPAIR TABLE لإعادة بناء جداول MyISAM:

REPAIR TABLE tablename;

سيعيد MySQL بناء البيانات والفهارس للجدول لاستعادة الاتساق.

بافتراض نجاح الإصلاح، سترى رسالة مثل هذه في مخرجاتك:

+--------------------------+--------+----------+----------+ 
| Table                    | Op     | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status   | OK       |
+--------------------------+--------+----------+----------+

ومع ذلك، في بعض الأحيان يكون التلف شديدًا لدرجة أن MySQL لا يستطيع إصلاح الجدول. في هذه الحالات، تقترح توثيقات MySQL:

  • تجربة أمر REPAIR TABLE مرة ثانية. قد تنجح محاولات الإصلاح اللاحقة.
  • استخدم myisamchk من سطر الأوامر لإعادة بناء الجداول. يمكن لهذه الأداة إصلاح تلف أكثر اتساعًا.
  • استخرج البيانات من الجدول باستخدام استعلامات SELECT إلى جدول آخر، ثم أعد إنشاء الجدول الأصلي من البيانات المستخرجة.
  • استخدم mysqldump لتصدير المخطط والبيانات إلى ملف تفريغ SQL. ثم قم بإسقاط الجدول، وإعادة إنشائه، واستيراد ملف التفريغ. يمكن لعملية النسخ الاحتياطي والاستعادة إعادة بناء الجداول التالفة غير القابلة للإصلاح المباشر.
  • استعيد الدليل البيانات MySQL بأكمله من ملفات النسخ الاحتياطي التي أُخذت قبل وقوع التلف. هذا يسمح بإعادة التشغيل باستخدام بيانات جيدة معروفة.

استعادة جداول InnoDB التالفة

InnoDB هو محرك تخزين MySQL الافتراضي الحديث. على عكس MyISAM، يخزن InnoDB البيانات والفهارس معًا في ملفات مساحة الجداول المشتركة.

كما تتمتع InnoDB بقدرات متقدمة على الاسترداد بعد الانهيار. إنها تؤدي فحوصات تجزئة لاكتشاف التلف ويمكنها تلقائيًا إلغاء المعاملات غير المكتملة عند إعادة التشغيل بعد الانهيار.

عادةً ما يكون إعادة تشغيل MySQL كافية لاستعادة InnoDB لاتساق البيانات بعد حدوث خلل. ولكن في بعض الأحيان تظل الجداول تالفة وبحاجة إلى إعادة بناء.

تتيح ميزة InnoDB المسماة innodb_force_recovery الوصول للقراءة فقط إلى الجداول التالفة لاستخراج البيانات. لتمكينها:

  • أوقف خدمة MySQL.
  • عدل my.cnf وأضف:
innodb_force_recovery=1
  • أعد تشغيل MySQL.

مع تمكين الاسترداد القسري، يمكنك الوصول إلى الجداول التالفة لاستخراج البيانات. وتكون التقنية الموصى بها كالتالي:

  • استخدم SELECT INTO OUTFILE لتصدير جميع بيانات الجدول إلى ملف نصي.
  • أسقط الجدول التالف الأصلي.
  • أعد إنشاء الجدول من المخطط.
  • استخدم LOAD DATA INFILE لاستيراد ملف البيانات المستخرج لملء الجدول المعاد بناؤه.

يمكن لعملية إعادة الإنشاء هذه إحياء جداول InnoDB غير القابلة للوصول إليها للإصلاح العادي.

تحاول قيم innodb_force_recovery الأعلى استرداد الانهيار على بيانات متضررة بشدة. ولكن هذا

تمكين وضع الاسترداد القسري في InnoDB

تحاول قيم innodb_force_recovery الأعلى استرداد الانهيار على بيانات متضررة بشدة. ولكن هذا يمكن أن يفاقم فقدان البيانات إذا كان التلف شديدًا. استخدم أقل مستوى استرداد قسري يسمح بالوصول للاستخراج.

بعض الإرشادات عند استخدام innodb_force_recovery:

  • ابدأ من 1 وزد تدريجيًا إذا لزم الأمر. القيم الأعلى أكثر تدخلاً.
  • زد المستوى فقط إذا فشل المستوى الحالي في توفير الوصول.
  • تجنب الذهاب أعلى من 3 إلا إذا كان ضروريًا تمامًا. يمكن أن تسبب المستويات 4 وما فوق تعطلات خطيرة.
  • عطل التلقائية وأكد المعاملات صراحة عند استعادة البيانات.
  • يمنع الوضع للقراءة فقط الكتابة التي يمكن أن تفاقم التلف.

بعد استخراج البيانات، قم بتعطيل الاسترداد القسري وأعد التشغيل كالمعتاد. ثم أعد تحميل البيانات المستعادة إلى جدول معاد بناؤه.

أفضل الممارسات لتجنب التلف

في حين تتضمن MySQL خيارات إصلاح للاسترداد، فمن المثالي تجنب التلف من البداية. وتشمل الخطوات التي تساعد في منع تلف الجداول:

  • استخدم مصدر طاقة لا انقطاع فيه لتجنب الأعطال الناجمة عن فقدان الطاقة.
  • تأكد من تفريغ كتابات MySQL من الذاكرة إلى القرص عند تأكيد المعاملة لمنع فقدان البيانات.
  • عزل MySQL على تخزين موثوق وعالي الأداء بدون أعباء عمل منافسة.
  • صحح واختبر كل شفرة التطبيق والإدارة التي تتفاعل مع قاعدة البيانات.
  • حدد الوصول المباشر إلى ملفات البيانات من خارج MySQL وتجنب التلاعب اليدوي.
  • نفّذ نسخا احتياطية منطقية بانتظام عبر mysqldump أو SELECT INTO OUTFILE للاستعادة من الكوارث.
  • استخدم النسخ للحفاظ على نسخ متكررة مرنة من البيانات.
  • راقب التجزئة وحسّن الجداول بشكل استباقي.
  • حافظ على تحديث كل برامج MySQL للاستفادة من آخر الإصلاحات.
  • اتبع أفضل ممارسات الأمان للحد من الاضطرابات الناجمة عن الوصول غير المصرح به.
  • كوّن المراقبة لتحديد المشاكل مثل الكتابات غير المفرّغة أو انتظارات إشارة طويلة التي يمكن أن تسبق التلف.

الخاتمة

على الرغم من الاحتياطات، ما زال تلف قاعدة البيانات يحدث. ولكن توفر MySQL النقاط الفاصلة والمجاميع التحققية وهياكل بيانات مقاومة للأعطال وميزات أخرى لتعظيم الكشف عن الأخطاء واستردادها من العديد من سيناريوهات الفشل.

إن معرفة عمليات الإصلاح وإعادة البناء اليدوية لكل من جداول MyISAM و InnoDB تمكّن من استعادة الوصول بسرعة عندما لا تكون الاستعادة الآلية كافية. إن الانتباه إلى أفضل ممارسات MySQL يساعد على تجنب معظم مشاكل التلف من البداية.

مع التكوين السليم وإجراءات المراقبة والنسخ الاحتياطي، يمكن لمدراء قواعد بيانات MySQL التصرف بسرعة للعودة إلى العمليات العادية مع أقل قدر من فقدان البيانات في حالة حدوث أي تلف.

LEAVE A COMMENT