كيفية استعادة قاعدة بيانات MySQL بعد حذف الملفات أو قسم في أوبونتو: RAID 6 وLUKS2

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

كيفية استعادة قاعدة بيانات MySQL بعد حذف الملفات أو قسم في أوبونتو: RAID 6 وLUKS2

يمكن أن تصبح ملفات قاعدة بيانات 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

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 لكل قسم.

جهاز MDRAID

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

الدليل mysql-data مع بيانات قاعدة البيانات الاختبارية company_db

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

تحتوي قاعدة البيانات على الجداول customers وproducts وorders

تم إنشاء النسخة الاحتياطية لقاعدة البيانات في MySQL Workbench على شكل تفريغ SQL وحفظها في الدليل mysql-backups.

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

تم حذف القسم الثاني عبر Cockpit

توصيل الأقراص للتحليل

في حالتنا، تم توصيل الأقراص المشاركة في RAID 6 بجهاز كمبيوتر يعمل بنظام Windows عبر محطة إرساء USB، وتم تشغيل Hetman RAID Recovery لإجراء التحليل.

لاستعادة البيانات من مصفوفات RAID المعطلة وأجهزة NAS وأنظمة التخزين الأخرى متعددة الأقراص.

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

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 المعطلة وأجهزة NAS وأنظمة التخزين الأخرى متعددة الأقراص.
Hetman RAID Recovery: تكوين MD RAID 6

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

Hetman RAID Recovery: تكوين MD RAID 6

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

يظهر القسم الثاني في الواجهة كمساحة غير مخصصة وموسومة LUKS. وهذا يعني أن البرنامج تعرّف على بيانات التعريف الخاصة بالحاوية المشفرة في موقع القسم المحذوف.

Hetman RAID Recovery: اكتشف البرنامج ثلاثة أقسام على المصفوفة المجمعة

الخطوة 2. فك القفل واستعادة الملفات المحذوفة

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

Hetman RAID Recovery: القسم مشفر باستخدام LUKS2

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

إذا لم يتم العثور على البيانات المطلوبة في حالتك، فارجع إلى تحديد نوع التحليل وشغّل Full Analysis مع تحديد نظام ملفات EXT2/3/4.

Hetman RAID Recovery: اختيار Fast Scan

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

Hetman RAID Recovery: تفريغ SQL backup1.sql، والدليل company_db، وملفات جداول MySQL

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

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

Hetman RAID Recovery: استعادة الملفات التي تم العثور عليها

الخطوة 3. استعادة قاعدة البيانات من تفريغ SQL

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

شغّل MySQL Workbench واتصل بخادم MySQL. افتح القائمة Server — Data Import، واختر Import from Self-Contained File، وحدد ملف SQL المستعاد.

MySQL Workbench: Server — Data Import - Import from Self-Contained File

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

حدد المخطط الهدف أو أنشئ قاعدة بيانات جديدة company_db، ثم انقر Start Import. انتظر حتى تكتمل العملية وتحقق من السجل بحثًا عن الأخطاء.

MySQL Workbench: إنشاء قاعدة بيانات company_db جديدة

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

MySQL Workbench: جداول customers وproducts وorders

الخطوة 4. استعادة قاعدة البيانات من ملفات MySQL المادية

إذا لم يتوفر تفريغ SQL مناسب، لكن Hetman RAID Recovery تمكن من استعادة دليل قاعدة البيانات مع ملفات الجداول، فيمكنك محاولة الاستعادة المادية.

في حالتنا، احتفظ الدليل company_db بالملفات customers.ibd وproducts.ibd وorders.ibd. يحتوي كل منها على بيانات وفهارس جدول InnoDB المقابل.

الملفات customers.ibd وproducts.ibd وorders.ibd

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

للاستعادة، جهّز خادمًا عاملاً بنفس إصدار MySQL. اتصل به عبر Workbench وأنشئ قاعدة بيانات فارغة.

اتصل بالخادم عبر Workbench وأنشئ قاعدة بيانات فارغة

إذا كان سكريبت SQL الأصلي الخاص بالبنية محفوظًا، فشغّل أوامر CREATE TABLE منه. يجب أن تتطابق الجداول تمامًا مع الأصل، بما في ذلك أنواع الأعمدة والمفاتيح والفهارس والترتيب (collation) وتنسيق الصفوف. لا حاجة لتشغيل أوامر إدخال البيانات — في هذه المرحلة يجب أن تظل الجداول فارغة.

الخطوة 5. استعادة بنية الجداول من ملفات ibd

إذا لم يكن سكريبت SQL الأصلي متاحًا، فيمكنك محاولة استعادة بنية الجداول من ملفات .ibd. في MySQL 8.0، تحتوي هذه الملفات على SDI — بيانات وصفية لقاموس البيانات. وتُستخدم الأداة ibd2sdi لقراءتها.

شغّل الأداة لكل ملف مستعاد واحفظ النتائج بتنسيق JSON. في حالتنا، حصلنا على بيانات وصفية من customers.ibd, products.ibd, and orders.ibd، ثم استخدمنا jq لفحص تعريف جدول customers.

ibd2sdi

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

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

قد تتضمن البيانات الوصفية اسم الجدول وإصدار MySQL

الخطوة 6. إرفاق ملفات ibd المستعادة

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

في Workbench، عطّل فحص المفاتيح الأجنبية مؤقتًا

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

انسخ ملفات .ibd المقابلة إلى دليل قاعدة البيانات على الخادم المُجهَّز

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

عد إلى Workbench وشغّل ALTER TABLE … IMPORT TABLESPACE

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

بعد نجاح الاستيراد، فعّل فحص المفاتيح الأجنبية

تتيح ملفات .ibd استعادة الجداول وبياناتها وفهارسها. ومع ذلك، لا تُخزَّن العروض والإجراءات والدوال كملفات منفصلة في الدليل company_db. وإذا لم تكن مضمنة في تفريغ SQL، فيجب إعادة إنشاء هذه الكائنات يدويًا.

بعد التحقق من قاعدة البيانات المستعادة، نوصي بإنشاء نسخة احتياطية جديدة بتنسيق SQL dump.

الخلاصة

باستخدام Hetman RAID Recovery، أمكن إعادة بناء بنية Linux MD RAID 6 تلقائيًا واكتشاف حاويات LUKS2 وفك قفلها باستخدام كلمة المرور المعروفة. وقد عثر الفحص السريع على الملفات المطلوبة سواء بعد حذفها أو بعد حذف قسم كامل.

يمكن استيراد تفريغ SQL المستعاد عبر MySQL Workbench، مما يعيد بنية قاعدة البيانات وبياناتها إلى الحالة التي كانت عليها وقت إنشاء النسخة الاحتياطية. وإذا لم يتوفر تفريغ مناسب، فيمكن استعادة جداول InnoDB الفردية من ملفات .ibd بعد إعادة إنشاء بنيتها أولًا.

Abdelhamid Balti

المؤلف: , كاتب تقني

عبد الحميد البلطي كاتب تقني في شركة Hetman Software. يتعامل مع البرامج التعليمية والإرشادات والمراجعات التفصيلية حول كيفية عمل أدوات وبرامج الشركة مع جميع أنواع أجهزة تخزين البيانات.

Mykhailo Miroshnichenko

محرر: , كاتب تقني

يعد ميخايلو ميروشنيتشنكو أحد المبرمجين الرائدين في شركة Hetman Software. يشارك معرفته مع قراء مدونتنا، إستنادًا إلى خمسة عشر عامًا من الخبرة في تطوير البرمجيات. بالإضافة إلى البرمجة، يعتبر ميخايلو خبيرًا في مجال إسترداد البيانات وأنظمة الملفات وأجهزة تخزين البيانات ومصفوفات RAID.

نوصى به لك