إذا بدأ Nextcloud بعرض استثناء "خطأ في قاعدة البيانات" بعد التحديث، فتحقق من الخطأ الأساسي في قاعدة البيانات nextcloud.logقبل تغيير أي جداول. استعد اتصال قاعدة البيانات أولاً؛ إذا توقف التحديث في منتصفه، فأكمله occ upgrade، ثم استخدم أوامر الإصلاح الموثقة فقط عندما تبرر السجلات ذلك.
تحديد العطل الفعلي
رسالة المتصفح هي عرض وليست تشخيصًا. قد يتعذر على Nextcloud الوصول إلى MySQL/MariaDB أو PostgreSQL، أو قد لا يتم التحقق من حساب قاعدة البيانات، أو قد يكون رمز التطبيق ومخططه في مراحل ترقية مختلفة. توصي إرشادات استكشاف الأخطاء وإصلاحها الرسمية لـ Nextcloud بمطابقة مُعرّف الطلب الفاشل مع سجل الخادم.
- سجّل الوقت، ورسالة الخطأ الكاملة للمتصفح، وأي معرّف طلب معروض. لا تنشر سجلات الدخول الخاصة دون إزالة الأسرار والمعلومات الشخصية.
- ابحث عن دليل البيانات المُكوّن في
config/config.php. ملف السجل الافتراضي هو data/nextcloud.log، ولكن قد تُسجّل عمليات النشر المُخصصة في مكان آخر.
- في نظام لينكس تقليدي، تحقق من الإدخالات الأخيرة ثم سجلات خدمة قاعدة البيانات. استبدل مسار Nextcloud الفعلي الخاص بك.
sudo tail -n 100 /var/www/nextcloud/data/nextcloud.log
sudo journalctl -u mariadb --since '30 minutes ago'
ينطبق الأمر الثاني فقط على مضيف يعمل بنظام MariaDB ضمن systemd؛ استخدم سجلات خدمة PostgreSQL أو سجلات الحاوية لعمليات النشر الأخرى. ابحث عن رمز الاستثناء SQLSTATEوأول سبب متعلق بقاعدة البيانات بدلاً من الاعتماد على سطر تتبع المكدس الأخير.
| دليل السجل | أول فحص مفيد |
SQLSTATE[HY000] [2002] | عملية قاعدة البيانات، اسم المضيف، المنفذ، مسار المقبس، أو الوصول إلى ملف SQLite؛ يحدد برنامج التشغيل التفسير. |
SQLSTATE[HY000] [1040] | استنفاد اتصالات MySQL/MariaDB والجلسات النشطة. |
MySQL server has gone away | إعادة تشغيل قاعدة البيانات، وانقطاع الاتصال، وضغط الموارد، وسجلات الخادم. |
| تم رفض المصادقة أو الوصول | حساب قاعدة البيانات، وكلمة المرور، والوصول إلى الشبكة، والأذونات. |
| جدول أو علاقة أو عمود مفقود | هل اكتملت ترقية قاعدة البيانات وهل يتطابق الكود المثبت مع مخططها؟ |
تُغطّى الأمثلة الثلاثة الأولى في قسم الأخطاء الشائعة الموثّقة في Nextcloud. لا تعني رسالة "الجدول المفقود" وجود إذن لإنشاء الجدول يدويًا: حدّد أولًا سبب فشل عملية الترحيل بدقة.
قم بحماية النظام قبل تطبيق الإصلاح
قبل إعادة محاولة عمليات النقل، احتفظ بنسخة احتياطية قابلة للاستعادة من قاعدة البيانات، بالإضافة إلى إعدادات Nextcloud وبياناتها. يشمل إجراء النسخ الاحتياطي الرسمي أيضًا التطبيقات والقوالب المخصصة، إن وجدت. تأكد من أن النسخة الاحتياطية تعود إلى نفس النقطة الزمنية؛ إذ لا يمكن لنسخة احتياطية تحتوي على التعليمات البرمجية فقط استعادة قاعدة بيانات تم تغييرها جزئيًا.
- قم بإيقاف عمليات المزامنة والوظائف التي تعمل في الخلفية مؤقتًا أثناء فترة الاسترداد كلما أمكن ذلك، وخاصة عند كتابة قواعد البيانات أو ترقيتها.
- احتفظ بسجل لإصدارات Nextcloud القديمة والجديدة، ومحرك/إصدار قاعدة البيانات، وإصدار PHP، وطريقة التحديث.
- لا تقم بحذف جداول قاعدة البيانات، أو استيراد مخطط فارغ، أو تشغيل استعلامات SQL عشوائية من المنتديات، أو استعادة مكون واحد فقط من نسخة احتياطية متعددة الأجزاء بشكل متكرر.
تفترض الأوامر أدناه تثبيت Debian/Ubuntu الشائع في المسار /var/www/nextcloud، مع www-dataاستخدام حساب خادم الويب الخاص به. يجب تشغيل الأمر occباستخدام مستخدم HTTP المناسب؛ إذ أن عمليات التثبيت الخاصة بالحزم، وDocker، وSnap، وAIO، والأنظمة المُدارة لها مسارات وطرق تنفيذ مختلفة. يشرح مرجع أمر occ هذه المتطلبات.
قم باستعادة اتصال قاعدة البيانات قبل الترحيل
تحقق من إعدادات خدمة قاعدة البيانات واتصال Nextcloud
إذا أظهرت السجلات رفضًا للاتصال، أو عدم إمكانية الوصول إلى المقبس، أو عدم توفر الخادم، فتحقق أولًا من تشغيل خدمة قاعدة البيانات الحالية. هذه فحوصات بديلة على مستوى المضيف، وليست قائمة تُنفذ عشوائيًا.
sudo systemctl status mariadb
sudo systemctl status postgresql
بالنسبة لخادم قاعدة بيانات منفصل، تحقق أيضًا من نظام أسماء النطاقات (DNS)، وقواعد جدار الحماية، والمنفذ المُختار، وإمكانية الوصول إلى الشبكة من مُضيف تطبيق Nextcloud أو حاويته. افحص config/config.phpالإعدادات التالية: dbtype` <hostname>` dbhost، dbnameو` <portname>`، و`<portname> dbuser`. يشرح مرجع معلمات التكوين أسماء المضيفين والمنافذ وبنية مقابس Unix. تجنب لصق هذه المعلومات dbpasswordفي التذاكر العامة أو أوامر shell التي تُعرض في سجل الأحداث.
إذا تم تغيير كلمة مرور قاعدة البيانات أو بيانات الاعتماد أثناء النشر، فقم بتصحيح هذا التباين باستخدام آلية إدارة الأسرار. إذا أبلغ الخادم عن عدد كبير جدًا من الاتصالات، فافحص الاتصالات النشطة وسبب تراكمها قبل النظر في تغييرات السعة. لن يُصلح أمر الفهرسة انقطاع الاتصال.
تحقق من توافق وقت التشغيل بعد التحديث
قد يؤدي التحديث المتزامن لبرنامج PHP أو خادم قاعدة البيانات إلى تعطيل تثبيت كان يعمل سابقًا. لذا، قارن إصدار Nextcloud المستهدف بمتطلبات النظام الرسمية وملاحظات الإصدار، بدلًا من افتراض أن جميع إصدارات برامج التشغيل والخوادم المثبتة حاليًا لا تزال مدعومة. وفقًا لوثائق Nextcloud 35 التي تم الاطلاع عليها، يدعم الإصدار PHP 8.3 إلى 8.5؛ أما إصدارات قواعد البيانات المقبولة فهي موثقة هناك بشكل منفصل. للإصدارات السابقة قيود مختلفة.
تأكد أيضًا من تفعيل برنامج تشغيل قاعدة بيانات PHP المطلوب للمحرك الذي اخترته في كلٍ من بيئة سطر الأوامر وبيئة الويب لـ PHP. لا تقم بتخفيض إصدار خادم قاعدة البيانات بشكل تلقائي بعد ترحيل المخطط: استعد فقط من نسخة احتياطية متوافقة ومتسقة.
أكمل أو أصلح عملية ترقية Nextcloud المتوقفة
بمجرد أن يصبح الوصول إلى قاعدة البيانات ممكناً ويتم تأمين نسخة احتياطية، انتقل إلى دليل تثبيت Nextcloud وتحقق من حالته:
cd /var/www/nextcloud
sudo -E -u www-data php occ status
إذا أبلغ Nextcloud بأن الترقية معلقة أو غير مكتملة، فاتبع مسار الترقية المدعوم لإصداري المصدر والهدف المثبتين. للتثبيت اليدوي التقليدي، قم بتشغيل:
sudo -E -u www-data php occ upgrade
لا تقاطع الأمر أو تُشغّل عمليات ترقية متزامنة. اقرأ مخرجاته: فالترقية الناجحة تختلف عن حدوث خطأ في اتصال قاعدة البيانات. تُقدّم وثائق الترقية اليدوية لـ Nextcloud توصيات واضحة بشأن occ upgradeالحالات التي تتوقف فيها عملية الترقية عبر الويب، وما maintenance:repairإذا كان مسار الترقية بحاجة إلى إصلاح.
sudo -E -u www-data php occ maintenance:repair
استخدم هذه الطريقة maintenance:repairبعد تحليل سبب الفشل؛ فهي ليست بديلاً عن إصلاح بيانات الاعتماد الخاطئة، أو قاعدة البيانات المتوقفة، أو بيئة التشغيل غير المتوافقة. في حال occ upgradeفشل عملية ترحيل SQL محددة، احفظ الاستثناء بدقة وابحث عن حل خاص بالإصدار أو استعد النسخة الاحتياطية المطابقة بالكامل بدلاً من تجربة أوامر DDL اليدوية.
لا تتعامل مع تحذيرات المخطط إلا بعد الترقية الناجحة
يتم تأجيل بعض عمليات الترحيل عمدًا. في نسخة عاملة، قد تطلب نظرة عامة من المسؤول أعمدة أو فهارس أو مفاتيح أساسية اختيارية. توفر هذه الأوامر معاينة تجريبية عند دعمها من قِبل هذا الإصدار.
sudo -E -u www-data php occ db:add-missing-indices --dry-run
sudo -E -u www-data php occ db:add-missing-columns --dry-run
sudo -E -u www-data php occ db:add-missing-primary-keys --dry-run
نفّذ الأمر المناسب بدون خيار "تشغيل" --dry-runإلا إذا استدعت المشكلة المسجلة أو الفحص الإداري ذلك، وبعد مراجعة التغيير المقترح. قد تستغرق عمليات الصيانة هذه وقتًا على قواعد البيانات الكبيرة. يوفر Nextcloud 35 توثيقًا إضافيًا db:schema:check؛ فلا تفترض وجوده في الفروع الأقدم. راجع مرجع أوامر قاعدة البيانات لمعرفة السلوك الخاص بكل إصدار.
تحقق من عملية الاسترداد وأعد فتح الوصول
- كرر العملية
sudo -E -u www-data php occ status. تأكد من أن الإصدار المثبت يطابق الإصدار المقصود، وأنه لا توجد حاجة إلى ترقية، وأنه لا يوجد استثناء SQL حرج جديد.
- إذا كان وضع الصيانة لا يزال قيد التشغيل واكتملت الترقية بنجاح ، فقم بتعطيله باستخدام
sudo -E -u www-data php occ maintenance:mode --off.
- افتح واجهة المستخدم الرسومية، وسجّل الدخول، واعرض قائمة الملفات، ثم قم بتحميل وتنزيل ملفات صغيرة مصرح بها. راقب
nextcloud.logأثناء هذه الفحوصات بحثًا عن أي استثناءات جديدة في قاعدة البيانات.
- استأنف المهام المجدولة ومزامنة العملاء، ثم راجع إعدادات الإدارة بحثًا عن أي تحذيرات متبقية في قاعدة البيانات.
إذا تكرر نفس خطأ قاعدة البيانات، أوقف عمليات الترحيل المتكررة واجمع مُعرّف الطلب، ونص SQLSTATE، وسجل خادم قاعدة البيانات، وإصدار قاعدة البيانات، ومخرجات الخطأ occ. تُحدد هذه الأدلة ما إذا كانت المشكلة المتبقية تتعلق بالاتصال، أو ببرامج غير متوافقة، أو بعملية ترحيل فاشلة مُحددة. لا يُعد تسجيل الدخول الناجح وحده دليلاً على أن جميع مهام الخلفية واستعلامات قاعدة البيانات تعمل بشكل صحيح.