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

0 الأسهم
0
0
0
0

مقدمة

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

تتضمن بعض الأسباب الشائعة لفساد الجدول ما يلي:

  • يتوقف خادم MySQL في منتصف الكتابة.
  • يقوم التطبيق الخارجي بتعديل جدول يتم تعديله في نفس الوقت بواسطة الخادم.
  • يتم إيقاف تشغيل الجهاز بشكل غير متوقع.
  • فشل أجهزة الكمبيوتر.
  • يوجد خطأ برمجي في مكان ما في كود MySQL.

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

أولاً، قم بإيقاف خدمة MySQL:

sudo systemctl stop mysql

ثم انسخ جميع بياناتك إلى مجلد احتياطي جديد. في أنظمة أوبونتو، مجلد البيانات الافتراضي هو /var/lib/mysql/:

cp -r /var/lib/mysql /var/lib/mysql_bkp

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

sudo systemctl start mysql
CHECK TABLE table_name;

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

REPAIR TABLE table_name;

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

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

إذا كان الجدول لا يزال تالفًا، فإن وثائق MySQL تقترح بعض الطرق البديلة لإصلاح الجداول التالفة.

من ناحية أخرى، إذا كان الجدول التالف يستخدم محرك تخزين InnoDB، فإن عملية الإصلاح تختلف. InnoDB هو محرك التخزين الافتراضي في MySQL منذ الإصدار 8.0، ويتميز بفحص وإصلاح تلقائي للتلف. يتحقق InnoDB من الصفحات التالفة عن طريق إجراء عمليات تدقيق على كل صفحة يقرأها، وإذا وجد أي تباين في الترتيب، فإنه يوقف خادم MySQL تلقائيًا.

نادرًا ما تحتاج إلى إصلاح جداول InnoDB، إذ يتمتع InnoDB بآلية استعادة بيانات الأعطال التي تُمكّن من حل معظم المشاكل عند إعادة تشغيل الخادم. مع ذلك، إذا واجهتَ موقفًا يتطلب إعادة بناء جدول InnoDB تالف، توصي وثائق MySQL باستخدام طريقة Dump and Reload. تتضمن هذه الطريقة استعادة الوصول إلى الجدول التالف، واستخدام أداة mysqldump لإنشاء نسخة احتياطية منطقية منه تحافظ على بنيته وبياناته، ثم إعادة تحميله إلى قاعدة البيانات.

مع وضع ذلك في الاعتبار، أعد تشغيل خدمة MySQL لمعرفة ما إذا كان القيام بذلك يسمح لك بالوصول إلى الخادم:

sudo systemctl restart mysql

إذا كان الخادم معطلاً أو غير متاح، فقد يكون من المفيد تفعيل خيار InnoDB force_recovery. يمكنك القيام بذلك بتعديل ملف mysqld.cnf. في أنظمة Ubuntu وDebian، يوجد هذا الملف عادةً في المسار etc/mysql. أما في أنظمة Red Hat وRocky، فيوجد عادةً في المسار /etc/my.cnf.d.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

في قسم [mysqld]، أضف السطر التالي:

. . .
[mysqld]
. . .
innodb_force_recovery=1

احفظ الملف وأغلقه، ثم أعد تشغيل خدمة MySQL. إذا نجحت في الوصول إلى الجدول التالف، فاستخدم أداة mysqldump لتفريغ بيانات الجدول في ملف جديد. يمكنك تسمية هذا الملف بأي اسم تريده، ولكننا سنسميه هنا dump.sql:

mysqldump database_name table_name > out.sql

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

mysql -u user -p --execute="DROP TABLE database_name.table_name"

بعد ذلك، قم باستعادة الجدول باستخدام ملف التفريغ الذي قمت بإنشائه:

mysql -u user -p < out.sql

تجدر الإشارة إلى أن محرك تخزين InnoDB أكثر تحمّلاً للأخطاء من محرك MyISAM الأقدم. مع ذلك، قد تتلف الجداول التي تستخدم InnoDB، ولكن بفضل ميزاته ذاتية الإصلاح، فإن خطر تلف الجداول وتعطلها أقل بكثير.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً