MySQL هو أحد أكثر أنظمة RDBMS (أنظمة إدارة قواعد البيانات العلاقاتية) مفتوحة المصدر شعبية. وهو جزء لا يتجزأ من الـ LAMP Stack وقد اكتسب شعبية هائلة بين المطورين ومسؤولي النظام. ومقارنة بـ non-relational databases، يوفر SQL وظائف ممتازة لترتيب البيانات وتخزينها وإدارتها بفعالية. إن وظائف ترتيب الجداول المميزة والقدرات البارزة لقاعدة بيانات SQL تجعلها خياراً مفضلاً على جميع مستويات المؤسسة، الكبيرة منها والصغيرة.
يمكن أن تتعرض جداول MySQL للتلف في حالات نادرة، مما يشير إلى حدوث مثل هذا الخطأ وأن البيانات المخزنة فيها غير قابلة للقراءة. عندما تحاول قراءة البيانات من جدول تالف، يتعطل الخادم ويعرض خطأً أو قائمة من الأخطاء.
الأسباب المحتملة وراء تلف جداول MySQL
فيما يلي بعض الأسباب الأكثر شيوعاً لتلف الجداول:
- تعطل خدمة MySQL بعد إعادة التشغيل.
- إيقاف تشغيل الجهاز بشكل غير متوقع بسبب انقطع التيار الكهربائي.
- ذاكرة تالفة أو فشل في الأجهزة.
- أخطاء برمجية في OS أو في كود SQL.
- إيقاف تشغيل MySQL أثناء الكتابة.
- يتم إيقاف تشغيل النظام OFF أثناء تحديث SQL.
قبل إصلاح جدول تشك في أنه تالف، قم بإنشاء نسخة احتياطية من دليل المعلومات الخاص بك. سيساعد هذا في تقليل احتمالية فقدان البيانات. في هذا الدليل السريع، سنرشدك خلال خطوات استكشاف الأخطاء وإصلاحها لإصلاح الجداول التالفة في MySQL.
المتطلبات الأساسية
لمتابعة هذا البرنامج التعليمي، ستحتاج إلى ما يلي:
- أحدث إصدار من Ubuntu مثبت على نظامك.
- يجب أن يمتلك مستخدمو النظام sudo privileges.
- إذا واجهت صعوبة في الوصول إلى حساب sudo الخاص بك، ففكر في تغيير MySQL root password.
- إعداد MySQL على خادمك.
الخطوة 1: إيقاف خدمة MySQL والنسخ الاحتياطي للبيانات
في البداية، قم بإيقاف خدمة MySQL باستخدام أمر systemctl :
|
1 |
sudo systemctl stop mysql |
بعد إيقاف خدمة SQL، الخطوة التالية هي إنشاء نسخ احتياطية لجميع الملفات الموجودة في دليل جديد. استخدم دليل البيانات الافتراضي لـ Ubuntu /var/lib/mysql/ لنسخ جميع بيانات النظام:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Step 2: Identify the Error
بعد ذلك، سنبدأ تحقيقنا ونحدد الجدول التالف. إذا كان الجدول يستخدم MyISAM storage engine، فاستخدم عبارة CHECK TABLE وتحقق من حالة الجدول:
|
1 |
mysql> CHECK TABLE table_name; |
ستظهر لك رسالة كمخرج تؤكد الجدول أو الجداول التالفة.
الخطوة 3: إصلاح الجدول التالف
إذا كان هناك خطأ في جدول MyISAM وقد قمت بتحديده، فاستخدم عبارة REPAIR TABLE لإصلاح الخطأ:
|
1 |
mysql> REPAIR TABLE table_name; |
إذا كان الإصلاح ناجحاً، فستظهر لك الرسالة التالية الخالية من الأخطاء كمخرج:
|
1 2 3 4 5 6 7 8 9 10 11 |
المخرجات: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
ومع ذلك، إذا وجدت أن الخطأ يتكرر، فاتبع MySQL version 8.0 official document لإعادة بناء أو إصلاح الجداول.
على عكس MyISAM storage engine، فإن عملية InnoDB المعنية بإصلاح الجداول تختلف في InnoDB storage engine. يعد InnoDB محرك التخزين الافتراضي في MySQL 8.0. ويتميز بعمليات فحص وإصلاح تلقائية للتلف. يقوم MySQL InnoDB بالتحقق من الصفحات التالفة عن طريق إجراء مجاميع التحقق (checksums) على كل صفحة يقرأها. وإذا تم اكتشاف أي تعارض، فسيقوم تلقائياً بإيقاف خادم MySQL.
الخلاصة هي أنه نادراً ما تكون هناك حاجة لإصلاح جداول InnoDB. حيث يتميز InnoDB بآلية استرداد بعد التعطل يمكنها حل معظم المشكلات من خلال إعادة التشغيل.
حاول إعادة تشغيل خدمة MySQL لمعرفة ما إذا كان بإمكانك الوصول إلى الخادم:
|
1 |
sudo systemctl restart mysql |
إذا فشلت في إعادة بناء جدول InnoDB تالف حتى بعد إعادة التشغيل، فجرّب طريقة “التفريغ وإعادة التحميل” المقترحة في وثائق MySQL. تتضمن هذه الطريقة استعادة الوصول إلى الجدول التالف، باستخدام أداة mysqldump المساعدة. يجب إنشاء مجلد لتخزين والاحتفاظ بـ النسخ الاحتياطي المنطقي للجدول. بمجرد إصلاح الخطأ، يتم إعادة تحميل الجدول مرة أخرى في قاعدة البيانات.
الخطوة 4: الاستفادة من خيار innodb_force_recovery
إذا ظل الخادم معطلاً أو غير قابل للوصول، فحاول استخدام خيار force_recovery في InnoDB. إن ضبط ON لـ force_recovery هو طريقة ممتازة لاستعادة قواعد بيانات MySQL. يمكنك تمكين هذا الخيار عن طريق تعديل ملف mysqld.cnf في محرر النصوص nano:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
أدخل السطر التالي أسفل قسم [mysqld]:

احفظ الملف وأغلقه بعد إعادة تشغيل خدمة MySQL.
الخطوة 5: إنشاء ملف mysqldump
إذا كنت قادراً على الوصول إلى الجدول التالف، فاستخدم خيار mysqldump لوضع جميع النسخ الاحتياطية في الملف الجديد. قم بتسمية الملف الجديد وفقاً لتفضيلك وتأكد من إضافة امتداد .sql في النهاية. هنا سنقوم بتسمية الملف باسم demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
بعد ذلك، استخدم استعلام DROP TABLE لإزالة الجدول من قاعدة البيانات. يمكنك استخدام الصيغة التالية لتجنب الحاجة إلى إعادة فتح موجه أوامر MySQL:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
ثم، باستخدام مستند النسخ الاحتياطي demo.sql الذي قمت بإعداده للتو، قم باستعادة الجدول:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
لقد قمت بإصلاح جدول MySQL التالف بنجاح، وأنت جاهز للعمل على قاعدة البيانات بسلاسة.
الخاتمة
من المحتمل حدوث تلف في الجداول أو تعطل غير متوقع للنظام إذا كنت تعمل مع حجم كبير من البيانات. وتجدر الإشارة إلى أن محرك تخزين MySQL InnoDB هو أكثر تحملاً للأخطاء من محرك MyISAM السابق. لا يزال من الممكن أن تتعرض الجداول التي تستخدم محرك تخزين InnoDB للتلف، على الرغم من أن خطر تلف الجداول والأعطال قد انخفض بشكل كبير بفضل ميزات الاسترداد التلقائي.
أخيراً، هناك العديد من المواضيع والبرامج التعليمية حول قواعد البيانات التي يمكنك استكشافها على مدونتنا:
- كيفية تثبيت MySQL على Centos 7
- مستخدم MySQL — إنشاء ومنح الأذونات
- إعداد النسخ المتماثل في MySQL على Ubuntu
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.