English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

طريقة حل مشكلة عدم بدء تشغيل قاعدة بيانات MySQL innodb أو عدم إعادة تشغيلها

شرح المشكلة

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

سجل الأخطاء

$ mysql.server start
بدء MySQL
. خطأ! الخادم غادر بدون تحديث ملف PID (/usr/local/var/mysql/fdipzonedeMacBook-Air.local.pid).
22:08:37 mysqld_safe بدء daemon mysqld مع قواعد البيانات من /usr/local/var/mysql
2016-04-23 22:08:38 0 [تحذير] TIMESTAMP مع القيمة الافتراضية المضمونة غير مستخدمة. يرجى استخدام خيار الخادم --explicit_defaults_for_timestamp (انظر الوثائق للحصول على مزيد من التفاصيل).
2016-04-23 22:08:38 0 [ملاحظة] /usr/local/Cellar/mysql/5.6.24/bin/mysqld (mysqld 5.6.24) بدء العمل كعملية 3604...
2016-04-23 22:08:38 3604 [تحذير] تعيين lower_case_table_names=2 بسبب عدم التمييز الحساسي للحالة في نظام الملفات لـ /usr/local/var/mysql/
2016-04-23 22:08:38 3604 [ملاحظة] Plugin 'FEDERATED' معطّل.
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: يستخدم atomics لحساب عدد الصفحات في حوض التخزين
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: تم تعطيل مخزن ذاكرة InnoDB
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: يستخدم mutexes و rw_locks بناءات atomic GCC
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: لا يستخدم حاجز الذاكرة
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: يستخدم جهاز ضغط الطاولات zlib 1.2.3
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: يستخدم التعليمات crc32 للمعالج
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: بدء تحضير حوض التخزين، حجم = 128.0M
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: تم إكمال بدء تشغيل حوض التخزين
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: أعلى صيغة ملف يدعمها Barracuda.
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: تقدم مسح السجل بعد نقطة التحقق lsn 68929933440
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: قاعدة البيانات لم تُغلق بشكل طبيعي!
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: بدء عملية استعادة الكارثة.
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: قراءة معلومات مساحة التخزين من ملفات .ibd...
2016-04-23 22:08:38 3604 [خطأ] InnoDB: عدم مطابقة التحقق من صحية في مساحة التخزين ./test_user/user_recommend_code#P#pmax.ibd (جدول test_user/user_recommend_code#P#pmax)
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف:1024 صفوف للتحليل:64
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف: 1024، عدد المحتملين space_id:0
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف:2048 صفوف للتحليل:48
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف: 2048، عدد المحتملين space_id:0
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف:4096 صفوف للتحليل:24
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف: 4096، عدد المحتملين space_id:0
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف:8192 صفوف للتحليل:12
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصف: 8192، عدد المحتملين space_id:0
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصفحة:16384 صفحات للتحليل:6
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: صالح: مساحة:2947354 رقم الصفحة:3 حجم الصفحة:16384
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: حجم الصفحة: 16384، عدد معرفات المساحة المحتملة:1
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: معرف المساحة:2947354، عدد الصفحات المتطابقة: 1/1 (16384)
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: المساحة المختارة:2947354
2016-04-23 22:08:38 3604 [ملاحظة] InnoDB: استعادة صفحة 0 من مساحة 2947354
2016-04-23 22:08:38 3604 [تحذير] InnoDB: لا يوجد صفحة_no=0 في المساحة: 2947354
2016-04-23 22:08:38 7fff79b9e300 InnoDB: رقم خطأ النظام التشغيل 2 في عملية ملف.
InnoDB: يعني الخطأ أن النظام لا يمكن العثور على المسار المحدد.
InnoDB: إذا كنت تقوم بتثبيت InnoDB، تذكر أنك يجب إنشاء
InnoDB: إنشاء الدوال بنفسك، InnoDB لا يخلقها.
InnoDB: خطأ: لم يتم فتح ملف مساحة جدول واحدة ./test_user/user_recommend_code#P#pmax.ibd
InnoDB: لا نستمر في عملية استعادة الكارثة، لأن الجدول قد يصبح
InnoDB: التلف إذا لم نتمكن من تطبيق سجلات السجل في سجل InnoDB عليه.
InnoDB: لحل المشكلة وبدء تشغيل mysqld:
InnoDB: 1) إذا كانت هناك مشكلة في الأذونات في الملف ولا يمكن تشغيل mysqld
InnoDB: افتح الملف، يجب عليك تعديل الأذونات.
InnoDB: 2) إذا لم تكن الجدول مطلوبًا، أو يمكنك استعادته من النسخ الاحتياطي،
InnoDB: ثم يمكنك إزالة ملف .ibd، وسيقوم InnoDB بإجراء استعادة طبيعية
InnoDB: استعادة الكارثة وتجاهل تلك الجدول.
InnoDB: 3) إذا كان نظام الملفات أو القرص معطل، ولا يمكنك إزالته
InnoDB: ملف .ibd، يمكنك تعيين innodb_force_recovery > 0 في my.cnf
InnoDB: واضغط على InnoDB ليعيد استئناف عملية استعادة الكارثة هنا.

حل المشكلة

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

الدخول إلى مجلد mysql، عادةً: /usr/local/var/mysql/

حذف ib_logfile*

حذف ibdata*

حذف جميع مجلدات قواعد البيانات المادية (على سبيل المثال، إذا كانت قاعدة البيانات test_db، فقم بتنفيذ rm -rf test_db)

إعادة تشغيل mysql

إعادة إنشاء قاعدة البيانات أو استخدام النسخ الاحتياطي لتحميلها

2. إذا كانت البيانات مهمة وليس لديك نسخة احتياطية

يمكن استخدام معامل innodb_force_recovery لجعل mysqld يخطو فوق خطوات الإصلاح، تشغيل mysqld، تصدير البيانات ثم إعادة بناء قاعدة البيانات.

يمكن تعيين innodb_force_recovery إلى 1-6، حيث تشمل الأرقام الأكبر تأثير الأرقام الأصغر.

     1. (SRV_FORCE_IGNORE_CORRUPT): تجاهل الصفحات التالفة المكتشفة.

     2. (SRV_FORCE_NO_BACKGROUND): منع تشغيل النواة الرئيسية، مثل إذا كان يجب على النواة الرئيسية تنفيذ عملية full purge، فإن ذلك سيؤدي إلى crash.

     3. (SRV_FORCE_NO_TRX_UNDO): عدم تنفيذ عمليات إلغاء المعاملات.

     4. (SRV_FORCE_NO_IBUF_MERGE): عدم تنفيذ عمليات دمج الحافز الإضافي.

     5. (SRV_FORCE_NO_UNDO_LOG_SCAN): عدم مراجعة سجلات التجدد، سيقوم محرك InnoDB بتقديم المعاملات غير المحفوظة كأنها تم تقديمها.

     6. (SRV_FORCE_NO_LOG_REDO): عدم تنفيذ عمليات التقدم للوراء.

إضافة إلى my.cnf (في Windows هو my.ini)

innodb_force_recovery = 6 
innodb_purge_thread = 0

إعادة تشغيل mysql

في هذه اللحظة يمكن تنفيذ عمليات select، create، drop فقط، ولكن لا يمكن تنفيذ عمليات insert، update، delete

إجراء عملية تصدير التنفيذ، بعد الانتهاء قم بإزالة innodb_force_recovery=0، innodb_purge_threads=1، ثم إعادة بناء قاعدة البيانات، وأخيرًا قم بإعادة استيراد البيانات المصدرة

الخلاصة

هذا هو نهاية محتوى هذا المقال، آمل أن يكون هذا مفيدًا لكم في تعلم أو استخدام mysql، إذا كان لديكم أي أسئلة، يمكنكم ترك تعليقات للتفاعل، شكرًا لدعمكم لتعليمات النفخ.

من المحتمل أن تفضله