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

- إعداد بيئة الاختبار وقاعدة بيانات MySQL
- توصيل الأقراص للتحليل
- كيفية استعادة قاعدة بيانات MySQL محذوفة من RAID 6 + LUKS2
- الخطوة 1. الاكتشاف التلقائي لأقسام RAID 6 وLUKS
- الخطوة 2. فك القفل واستعادة الملفات المحذوفة
- الخطوة 3. استعادة قاعدة البيانات من تفريغ SQL
- الخطوة 4. استعادة قاعدة البيانات من ملفات MySQL المادية
- الخطوة 5. استعادة بنية الجداول من ملفات ibd
- الخطوة 6. إرفاق ملفات ibd المستعادة
- الخلاصة
- الأسئلة الشائعة
- التعليقات
يمكن أن تصبح ملفات قاعدة بيانات MySQL ونسخها الاحتياطية على خادم Linux غير متاحة لأسباب مختلفة: الحذف العرضي للملفات، تهيئة قسم أو حذفه، تلف نظام الملفات، فشل مصفوفة RAID، فشل القرص، أو فشل متحكم RAID. وتصبح الحالة أكثر تعقيدًا إذا كانت البيانات مخزنة على قسم مشفر باستخدام LUKS2.
يساعد Hetman RAID Recovery في إعادة بناء هياكل مصفوفات RAID، وتحديد مواقع الأقسام المفقودة، وفك قفل LUKS2 إذا كانت كلمة المرور متاحة، واستعادة ملفات قواعد البيانات وعمليات التفريغ SQL.
سنقوم بعرض البرنامج على جهاز يعمل بنظام Windows. ومع ذلك، يتوفر Hetman RAID Recovery أيضًا لنظامي Linux وmacOS.
How to Recover Oracle Database 26ai from LVM RAID 6 + LUKS2 via SSH
إعداد بيئة الاختبار وقاعدة بيانات MySQL
لاختباراتنا، استخدمنا خادم Dell PowerEdge R710 مع متحكم PERC H700.
| المعلمة | المواصفات |
|---|---|
| طراز الخادم | Dell PowerEdge R710 |
| عامل الشكل | Rack 2U |
| المعالج | حتى 2 × Intel Xeon من السلسلة 5500/5600 |
| ذاكرة RAM | DDR3 ECC، حتى 288 جيجابايت (18 فتحة) |
| متحكم RAID | Dell PERC H700 |
| نوع RAID | RAID عتادي |
| مستويات RAID المدعومة | RAID 0، 1، 5، 6، 10، 50، 60 |
| تكوين المصفوفة | RAID 6 |
| واجهة الأقراص | SAS/SATA، حتى 6 جيجابت/ثانية |
| عدد فتحات الأقراص | حتى 6 × 3.5″ أو 8 × 2.5″ حسب التكوين |
| ذاكرة التخزين المؤقت لمتحكم RAID | 512 ميجابايت أو 1 جيجابايت (حسب الطراز) |
| حماية ذاكرة التخزين المؤقت | BBU — حماية ذاكرة التخزين المؤقت بالبطارية |
| نظام التشغيل | Ubuntu Server |
| تشفير البيانات | LUKS2 (على مستوى Linux، وليس على متحكم RAID) |
| نظام إدارة قواعد البيانات | MySQL |
| تحمل أعطال RAID 6 | يسمح بفشل متزامن لما يصل إلى قرصين |
| أدوات التشخيص | Dell OpenManage، وMegaCLI، وStorCLI (إذا كانت متوافقة) |
لتوفير وصول مباشر لنظام التشغيل إلى كل قرص مادي، تم إنشاء ستة مصفوفات RAID 0 أحادية القرص على المتحكم — واحدة لكل قرص. تم تثبيت Ubuntu Server 24.04 على أحدها، وتم دمج الأقراص الأربعة الأخرى في مصفوفة MD RAID 6 برمجية عبر Cockpit.
تم إنشاء جدول تقسيم GPT وثلاثة أقسام على المصفوفة، مع استخدام ext4 كنظام ملفات واختيار تشفير LUKS2 لكل قسم.

وُضِعَ الدليل mysql-data على القسم الثالث وكان يحتوي على بيانات قاعدة البيانات الاختبارية company_db وملفات النظام وسجلات MySQL. تم استخدام MySQL version 8.0.46.

كانت قاعدة البيانات نفسها تحتوي على الجداول customers, products وorders، بالإضافة إلى view وإجراء مخزن ودالة.

تم إنشاء النسخة الاحتياطية لقاعدة البيانات في MySQL Workbench على شكل تفريغ SQL وحفظها في الدليل mysql-backups.
قبل الاختبار، نُسِخت الدلائل mysql-data وmysql-backups من القسم الثالث إلى القسم الثاني. ثم حُذِفَ القسم الثاني عبر Cockpit، كما حُذِفت ملفات قاعدة البيانات وتفريغ SQL من القسم الثالث باستخدام Shift + Delete، مع تجاوز سلة المحذوفات. وبذلك تم إعداد سيناريوهين: استعادة الملفات من قسم محذوف واستعادة الملفات المحذوفة من قسم محفوظ.

توصيل الأقراص للتحليل
في حالتنا، تم توصيل الأقراص المشاركة في RAID 6 بجهاز كمبيوتر يعمل بنظام Windows عبر محطة إرساء USB، وتم تشغيل Hetman RAID Recovery لإجراء التحليل.
إلى جانب العمل مع الأقراص المادية، يدعم البرنامج تحليل صور الأقراص الكاملة على مستوى البايت. ويمكن إنشاء مثل هذه الصور مباشرةً في Hetman RAID Recovery باستخدام وظيفة Save Disk وحفظها على قرص سليم آخر.

يكون ذلك مفيدًا بشكل خاص إذا كان القرص غير مستقر، أو يحتوي على قطاعات تالفة، أو ينتج أخطاء قراءة. يؤدي إنشاء صورة إلى حفظ البيانات القابلة للقراءة ويتيح فحص النسخة لاحقًا، مما يقلل عدد مرات الوصول المتكررة إلى القرص المتضرر.
إذا بقيت الأقراص على خادم Linux وكانت قابلة للقراءة، فيمكن تحليلها عن بُعد. للقيام بذلك، اتصل بالخادم عبر SSH في Hetman RAID Recovery واحصل على الوصول إلى أجهزة الكتل الخاصة به.
كيفية استعادة قاعدة بيانات MySQL محذوفة من RAID 6 + LUKS2
الخطوة 1. الاكتشاف التلقائي لأقسام RAID 6 وLUKS
مباشرةً بعد التشغيل، اكتشف Hetman RAID Recovery تلقائيًا تكوين MD RAID 6 وأعاد بناء هيكله للتحليل.

تعرض اللوحة اليمنى المعلمات الرئيسية للمصفوفة: نوع RAID وحالته، وترتيب الكتل وحجمها، بالإضافة إلى قائمة الأقراص المشاركة مع تسلسلها وإزاحاتها وأحجامها.

على المصفوفة المُجمَّعة، اكتشف البرنامج ثلاثة أقسام، بما في ذلك القسم الثاني الذي تم حذفه سابقًا، وحدد تشفير LUKS على الأقسام الثلاثة كلها. قبل إدخال كلمة المرور، لا يتم عرض أنظمة الملفات الخاصة بها — يجب فك قفل الأقسام لمزيد من التحليل.
يظهر القسم الثاني في الواجهة كمساحة غير مخصصة وموسومة LUKS. وهذا يعني أن البرنامج تعرّف على بيانات التعريف الخاصة بالحاوية المشفرة في موقع القسم المحذوف.

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

أولاً، اختر Fast Scan. انتظر حتى يكتمل الفحص، وبعد ذلك سيفتح البرنامج بنية المجلدات التي تم العثور عليها. في اختبارنا، عثر الفحص السريع على الملفات المطلوبة في القسم المحذوف.
إذا لم يتم العثور على البيانات المطلوبة في حالتك، فارجع إلى تحديد نوع التحليل وشغّل Full Analysis مع تحديد نظام ملفات EXT2/3/4.

راجع نتائج الفحص. في حالتنا، عرض البرنامج تفريغ SQL backup1.sql، والدليل company_db، وملفات جداول MySQL بامتداد .ibd. يمكن التحقق من محتويات تفريغ SQL في نافذة المعاينة.

حدد الملفات والمجلدات التي تريد استعادتها، ثم انقر Recovery. اختر طريقة الحفظ، وحدد قرصًا ماديًا آخر، واحتفظ بخيار استعادة بنية الدليل مفعلاً.
لا تحفظ الملفات التي تم العثور عليها على نفس القرص الذي تتم الاستعادة منه، لتجنب الكتابة فوق بيانات مفقودة أخرى.

الخطوة 3. استعادة قاعدة البيانات من تفريغ SQL
أسهل طريقة لاستعادة قاعدة البيانات هي استخدام تفريغ SQL المستعاد. فهو يحتوي على أوامر لإنشاء بنية قاعدة البيانات واستعادة البيانات كما كانت وقت إنشاء النسخة الاحتياطية. وإذا تم اختيار خيارات التصدير المناسبة، فسيتضمن التفريغ أيضًا العروض والإجراءات والدوال.
شغّل MySQL Workbench واتصل بخادم MySQL. افتح القائمة Server — Data Import، واختر Import from Self-Contained File، وحدد ملف SQL المستعاد.

إذا فُقِدَ الدليل mysql-data بالكامل مع ملفات نظام MySQL، فيجب أولاً استعادة وظيفة الخادم أو إعداد مثيل MySQL جديد. عندها فقط يمكن استيراد التفريغ عبر Workbench.
حدد المخطط الهدف أو أنشئ قاعدة بيانات جديدة company_db، ثم انقر Start Import. انتظر حتى تكتمل العملية وتحقق من السجل بحثًا عن الأخطاء.

حدّث قائمة المخططات. يجب أن تحتوي قاعدة البيانات الآن على الجداول customers, products, and orders. افتحها وتحقق من السجلات.

الخطوة 4. استعادة قاعدة البيانات من ملفات MySQL المادية
إذا لم يتوفر تفريغ SQL مناسب، لكن Hetman RAID Recovery تمكن من استعادة دليل قاعدة البيانات مع ملفات الجداول، فيمكنك محاولة الاستعادة المادية.
في حالتنا، احتفظ الدليل company_db بالملفات customers.ibd وproducts.ibd وorders.ibd. يحتوي كل منها على بيانات وفهارس جدول InnoDB المقابل.

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

إذا كان سكريبت SQL الأصلي الخاص بالبنية محفوظًا، فشغّل أوامر CREATE TABLE منه. يجب أن تتطابق الجداول تمامًا مع الأصل، بما في ذلك أنواع الأعمدة والمفاتيح والفهارس والترتيب (collation) وتنسيق الصفوف. لا حاجة لتشغيل أوامر إدخال البيانات — في هذه المرحلة يجب أن تظل الجداول فارغة.
الخطوة 5. استعادة بنية الجداول من ملفات ibd
إذا لم يكن سكريبت SQL الأصلي متاحًا، فيمكنك محاولة استعادة بنية الجداول من ملفات .ibd. في MySQL 8.0، تحتوي هذه الملفات على SDI — بيانات وصفية لقاموس البيانات. وتُستخدم الأداة ibd2sdi لقراءتها.
شغّل الأداة لكل ملف مستعاد واحفظ النتائج بتنسيق JSON. في حالتنا، حصلنا على بيانات وصفية من customers.ibd, products.ibd, and orders.ibd، ثم استخدمنا jq لفحص تعريف جدول customers.

قد تتضمن البيانات الوصفية اسم الجدول وإصدار MySQL ومحرك التخزين والترتيب (collation) ومعلمات مساحة الجدول. كما تحتوي على تعريفات الأعمدة. ويتم تخزين معلومات المفاتيح الأساسية والفريدة، والفهارس الثانوية، والعلاقات مع الجداول الأخرى بشكل منفصل.
يمكن تحليل JSON الناتج يدويًا في محرر نصوص. وبناءً على المعلمات المكتشفة، يمكن لبرامج نصية ومحولات خاصة إنشاء أوامر CREATE TABLE أولية تلقائيًا. بالنسبة لعدد كبير من الجداول، يؤدي ذلك إلى تسريع استعادة البنية بشكل كبير.

الخطوة 6. إرفاق ملفات ibd المستعادة
في Workbench، عطّل فحص المفاتيح الأجنبية مؤقتًا ونفّذ الأمر ALTER TABLE … DISCARD TABLESPACE لكل جدول تم إنشاؤه. يؤدي ذلك إلى فصل مساحة التخزين الفارغة التي تم إنشاؤها وإعداد الجدول لإرفاق الملف المستعاد.

بعد ذلك، انسخ ملفات .ibd المقابلة إلى دليل قاعدة البيانات على الخادم المُجهَّز. بعد النسخ، لا تنسَ تعيين المالك mysql للملفات وضبط أذونات الوصول المطلوبة.

عد إلى Workbench وشغّل ALTER TABLE … IMPORT TABLESPACE لكل جدول. إن التحذيرات المتعلقة بملفات .cfg المفقودة ليست حرجة: سيواصل MySQL الاستيراد دون التحقق التلقائي من البنية. سيقوم MySQL بتسجيل مساحات التخزين المستعادة وإرفاق البيانات والفهارس بتعريفات الجداول التي تم إنشاؤها مسبقًا.

بعد نجاح الاستيراد، أعد تمكين فحص المفاتيح الأجنبية. حدّث قائمة المخططات وتحقق من عدد السجلات ومحتواها باستخدام استعلامات SELECT.

تتيح ملفات .ibd استعادة الجداول وبياناتها وفهارسها. ومع ذلك، لا تُخزَّن العروض والإجراءات والدوال كملفات منفصلة في الدليل company_db. وإذا لم تكن مضمنة في تفريغ SQL، فيجب إعادة إنشاء هذه الكائنات يدويًا.
بعد التحقق من قاعدة البيانات المستعادة، نوصي بإنشاء نسخة احتياطية جديدة بتنسيق SQL dump.
الخلاصة
باستخدام Hetman RAID Recovery، أمكن إعادة بناء بنية Linux MD RAID 6 تلقائيًا واكتشاف حاويات LUKS2 وفك قفلها باستخدام كلمة المرور المعروفة. وقد عثر الفحص السريع على الملفات المطلوبة سواء بعد حذفها أو بعد حذف قسم كامل.
يمكن استيراد تفريغ SQL المستعاد عبر MySQL Workbench، مما يعيد بنية قاعدة البيانات وبياناتها إلى الحالة التي كانت عليها وقت إنشاء النسخة الاحتياطية. وإذا لم يتوفر تفريغ مناسب، فيمكن استعادة جداول InnoDB الفردية من ملفات .ibd بعد إعادة إنشاء بنيتها أولًا.







