English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
شرح المشكلة
أثناء استخدامه، توقف جهاز الكمبيوتر عن العمل، وبعد إعادة التشغيل، لم يبدأ 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، إذا كان لديكم أي أسئلة، يمكنكم ترك تعليقات للتفاعل، شكرًا لدعمكم لتعليمات النفخ.