في العالم الحديث، لا تعتمد الشركات بالفعل على platform خاصة لمعالجة البيانات. هناك منابع قاعدات بيانات عديدة تكون كافية لمعالجة مستويات عمل معتدلة واحتياجات العملاء بالمتوافرة العالية والاستعادة من الكوارث. MySQL هو one من تلك الأساسيات القاعدات التي توفر مجموعة كبيرة من الميزات والأداء العالي.
مثلما تكون أي من RDBMS الأخرين، يمكن أيضًا أن تكون MySQL عرضة لتلوث البيانات والجداول. The أخر إنقطاع أثناء التشغيل والذي أثار مشاكل مع Microsoft و CrowdStrike أيضًا أثر على مخزونات مراقبة MySQL. بسبب فشل الأنظمة التشغيلية، تتلوث جداول البيانات أو البيانات بأكملها.
في هذه المقالة، سأريكم كيف يمكننا تلوث وإصلاح جداول قاعدة MySQL. هذا المقال مفيد للمديرين المختصين بالبيانات للمحاكاة للفشلات ومساعدتهم على تحديد أفضل الطرق الممكنة لإعادة تشغيل أو تصليح جداول MySQL معطوفة.
فهم تلوث قاعدة MySQL البيانات
يمكن أن تظهر تلوث البيانات في MySQL بطرق مختلفة، بما في ذلك:
جداول غير قابلة للوصول
تصبح الجداول الكاملة أو مجموعة من الجداول غير قابلة للوصول. عندما تحاول معرفة الجداول المتلوثة، سوف تصطدم بأخطاء توصي بتلوث ملفات المصفوفة أو ملفات البيانات للجداول.
أخطاء توأين البيانات غير المتوافقة.
إذا كانت الجدول متضررة، بدلاً من البيانات المعنية، قد تعود استعمال استعمال البحث على بعض القيم السيئة أو النتائج الغير متجاوزة أو النتائج الغير متماسكة.
إنهاء غير متوقع
في بعض الحالات قد تنهار MySQL أثناء مراجعة الجدول أو تشغيل النسخ الاحتياطية باستخدام mysqldump
. وجدت هذه الخطأ مرة أثناء محاكاة سياق التدمير. تدمرت ملف البيانات للجدول. بعد بدء الخدمة، عندما حاولت استخدام جدول بواسطة أحد الأعمال SELECT
، تنهارت خدمات MySQL تلقائيًا.
رسائل الخطاء خلال عمليات البيانات
أثناء مراجعة الجدول المتضررة، قد تواجه بعض الأخطاء مثل:
ERROR 1016: Can't open file: 'table_name.MYI' (errno: 145)
Table ‘table_name’ is marked as crashed and should be repaired
Got error 28 from storage engine
ERROR 1030: Got error 127 from storage engine
هذه الأخطاء تشير إلى أن ملف البيانات أو ملفات المؤشرات المرتبطة متضررة.
من المهم جدًا أن تفهم سبب التدميرلتحديد تأمين تجنب الحدوث مرات أخرى وضمان الصدقة البياناتية.
المقاييس لإصلاح جدولات MySQL
قبل محاولة أي إصلاح، تأكد من وجود التأكيد التالي:
- تأكيد باقي نسخ بياناتك المتضمنة للبيانات المتعلقة بMySQL
- مساحة القرود كافية
- دخول إداري للخوادم MySQL
حاليًا، دعونا نمحاكم التدمير اللامعنى للجدول.
تدمير جدول MySQL.
قبل أن نتعرف على عملية إصلاح قاعدة البيانات، سنفهم أولا كيفية تلويث قاعدة البيانات. للعرض، قمت بإنشاء قاعدة بيانات تُدعى “CorruptDB” على خادم قاعدة البيانات MySQL. قمت أيضا بإنشاء جدول تُدعى corrupt_table
في قاعدة البيانات CorruptDB.
هنا الكود لإنشاء القاعدة والجدول.
Create database corruptDB;
Use corruptdb;
CREATE TABLE corrupt_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
قمت بإضافة مليون سجل إلى الجدول عن طريق تنفيذ السؤال التالي.
INSERT INTO corrupt_table (data)
SELECT CONCAT('RandomData-', FLOOR(1000 + (RAND() * 9000)))
FROM corrupt_table;
لاحظ أن محاكاة تلويث الجدول تم على حاسبي المحمول. لا تحاول هذا في الإنتاج أو التطوير أو أي بيئة أخرى. الجدول الذي أستخدمه في هذه العرض تم إنشاؤه بمحرك قاعدة البيانات MyISAM. يمكنك القراءة عن محركات تخزين 替代 لمعرفة المزيد عن محركات قاعدة البيانات لخادم MySQL.
قمت بإجراء الخطوات التالية لتلويث الجدول.
الخطوة 1: إيقاف خدمات خادم MySQL
عليك إيقاف خادم MySQL. لفعل ذلك، قم بتشغيل PowerShell كمسؤول وقم بتنفيذ الأمر التالي.
net stop MySQL
بدلاً من ذلك، يمكنك أيضا إيقافه من خلال خدمات.
الخطوة 2: تلويث ملف الفهرس للجدول
الآن، يتوجب علينا تلويث ملف الفهرس للجدول. عندما تنشئ جدولًا في محرك قاعدة البيانات MyISAM، يتم إنشاء ثلاثة ملفات عند إنشاء الجدول باستخدام محرك قاعدة البيانات MyISAM.
- ملفات MYD: يحتوي هذا الملف على البيانات الفعلية.
- ملفات MYI: هذا ملف الفهرس.
- ملفات Frm: يحتوي الملف على هيكل جدول.
سنcorrupt ملف الفهرس. ملفات البيانات توجد في الموقع الافتراضي الذي هو “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb.” للتلف، نحن نستخدم محرر التواليت.
قم بتحميل وتثبيت محرر التواليت. افتح ملفات MYI باستخدامه. يبدو الملف كالصورة التالية:
استبدل البايتات الخمسة الأولى بقيم عشوائية. حفظ الملف وإغلاق المحرر.
الآن، دعونا نبدأ الخدمة ونحاول الوصول إلى الجدول.
الخطوة 3: بدء خدمات MySQL والوصول إلى الجدول
أولا، بدء خدمات MySQL بإجراء الأمر التالي في PowerShell.
net start MySQL
بمجرد بدء الخدمات، قم بتنفيذ الاستعلام التالي في سطر الأوامر MySQL.
mysql> use corruptdb;
Database changed
mysql> select count(1) from corrupt_table;
أعاد الاستعلام الخطأ التالي:
يشير الخطأ إلى أن فهرس corrupt_table
قد تعطل ويجب إصلاحه.
وسائل الإصلاح اليدوية لجداول MySQL
هناك بعض الوسائل التي يمكنك استخدامها لإصلاح الجدول المتعطل في MySQL. الطريقة الأولى هي استخدام الأوامر CHECK TABLE
و REPAIR TABLE
أوامر فحص الجدول وإصلاح الجدول
يمكنك إستعادة الجدول باستخدام الأوامر الداخلية CHECK TABLE
و REPAIR TABLE
لـMySQL. هذه الأوامر تستخدم للتشخيص وإصلاح أي جدول MyISAM.
الأمر فحص الجدول يتحقق من سلامة الجدول. يتحقق من بنية الجدول، الفهارس، والبيانات لأي تلف أو تتبع الأعطال ويظهر التفاصيل. السيntaxة هي التالية:
CHECK TABLE [option]
يمكنك تحديد الخيارات المختلفة.
QUICK
: هذا الخيار يقوم بفحص سريع وتحديد الأشياء مثل الفهارس المتضررة.FAST
: يفحص الجداول التي لم تغلق بصورة صحيحة.CHANGED
: هذا الخيار يفحص فقط الجداول التي تغيرت بعد آخر تنفيذ لـCHECK TABLE
.MEDIUM
: هذا الخيار يفحص السجلات ويؤكد بأن الروابط بين الجدول والبيانات صحيحة.EXTENDED
: هذا الخيار يجري فحص دقيق لبنية الجدول ومحتوياته.
هنا في هذه العرضة، سنقوم بفحص سريع. هذه هي الأمر.
CHECK TABLE corrupt_table
الصورة:
كما ترون في الصورة أعلاه، يشير الخطأ إلى أن فهرس corrupt_table
متضرر ويحتاج إلى إصلاح.
سنستخدم الأمر REPAIR TABLE
لإصلاح التلف في الجدول. يستخدم الأمر REPAIR TABLE
لإصلاح بنية الجدول والبيانات من التلف، خاصة الجداول التي تحتوي محرك قاعدة البيانات MyISAM. في حالة تلف الفهرس للجدول، يعيد الأمر REPAIR TABLE
بناء الفهارس.
سيntaxية REPAIR TABLE
هي كما يلي:
REPAIR TABLE [option]
يمكنك تحديد الخيارات التالية:
QUICK
: يصلح فقط ملف فهرس الجدول. لا يتمكن من الوصول إلى ملف بيانات الجدول.توسيع
: عندما نستخدم هذه الخيارة ستقوم الأمر بتصحيح شديد. ويتم تصحيح أو إعادة تشكيل الملف المصمم بمسح جميع السجلات للجدول.
في هذه الديمو سنقوم بتلوث ملف البحث الخاص بالجدول لذا سنستخدم الخيار سريع
. قم بتنفيذ الأمر التالي
REPAIR TABLE corrupt_table
شاشة التقاط:
وكما ترون في الصورة السفلية ، تم تصحيح corrupt_table
بنجاح. للتحقق ، قم بتنفيذ التسألة التالية على MySQL Workbench:
use corruptdb;
select count(1) from corrupt_table;
خريطة المعلومات:
وكما ترون ، تم توفير الجدول الآن.
إعادة Restaura de la Tabla Utilizando el Comando mysqldump
الطريقة الثانية هي إعادة الجدول بالتخزين. ويمكن استخدام هذه الطريقة عندما تكون الجدول قد تلوث للغاية ولا يمكن التصحيح باستخدام أمر REPAIR TABLE
.
لإعادة جدول MySQL من ال备份، يمكنك استخدام أمر mysqldump
. يمكنك قراءة مقالة “mysqldump — Programa de Copia de Seguridad de Base de Datos” لتعلم المزيد عن كيفية استخدام أمر mysqldump. النمط لإعادة الجدول يوجد أسفل.
mysql -u [username] -p [database_name] < [table_dump.sql]
في النمط:
اسم المستخدم
: أدخل اسم المستخدم الذي تستخدمه للتواصل بقاعدة MySQL.-p
: especificar la contraseña. Si la deja en blanco, MySQL le pedirá una contraseña.[database_name]
: Especificar el nombre de la base de datos en la que intenta restaurar la tabla.Table_dump.sql
: أخبر المستند المتبقَّى بإسمه بالكامل.
للتوضيح، قمت بإنجاز نسخة باقية لقاعدة البيانات CorruptDB التي توجد في مجلد C:\MySQLData\Backup.
لإستعادة corrupt_table
, يمكننا استخدام الأوامر التالية.
mysql -u root -p corruptdb < C:\MySQLData\Backup\corrupt_table.sql
بمجرد تنفيذ الأومر بنجاح، سيكون باستطاعتك الوصول إلى الجدول. قم بتنفيذ التسألة التالية للتحقق منها.
use corruptdb;
select count(1) from corrupt_table;
تسألة الخروج:
كما ترون في الشاشة الأعلى، تم إستعادة الجدول بنجاح.
باستخدام phpMyAdmin
يمكنك أيضًا استخدام أداة phpMyAdmin لإصلاح أي قاعدة بيانات MySQL متضررة. phpMyAdmin هي واجهة تصميمية لإدارة وحماية MySQL و MariaDB. للتوضيح، قمت بتثبيتها على حاسبي.
- لإصلاح الجدول، قم بتشغيل phpMyAdmin وتنقل إلى قاعدة البيانات التي تحتوي الجدول المتضرر.
- في اللوحة الأيمنة، يمكنك رؤية قائمة بجميع الجدول المنشورة في قاعدة CorruptDB.
- حدد
Corrupt_table
من القائمة واختر خيار Repair table من القائمة المنسدة.
هذه شاشة للمرجع:
بمجرد إصلاح الجدول، يمكنك رؤية حالة corrupt_table
أصبحت عالية. هذه هي الشاشة:
الخلاصة
في هذه المقالة تعلمنا عن الأسباب المحتملة للتلوث في قاعدة البيانات MySQL وكيفية إصلاحها. و شرحت عملية خطوية بخطوة لتلويث جداول MySQL بواسطة محرر 十六进制. كما أغطيت كيفية إصلاحها باستخدام الأوامر CHECK TABLE
و REPAIR TABLE
. أيضًا تعلمنا كيفية إعادة تحميل الجدول بواسطة وسيلة mysqldump
.
تصميم جدول MySQL تلويث قاعدة بيانات قد يكون صعبًا و لكن مع الأدوات الصحيحة والطرق يمكن التعامل بها. توفر الطرق اليدوية حل المشاكل بشكل بسيط بينما يقدم phpMyAdmin خيارًا إنصافيًا وموثوقًا للتعامل مع التلويث. تأكد دائمًا من نسخ الاحتياطات الدائمة وعملية رفع صحة قاعدة البيانات لتخفيض خطر التلويث.
Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step