أسرع طريقة لعزل خطأ "فشل الاتصال بقاعدة البيانات" في ownCloud 10 هي اختبار نفس حساب MySQL واسم قاعدة البيانات والمضيف من خادم ownCloud نفسه. إذا فشل تسجيل الدخول، فقم أولاً بإصلاح توفر MySQL، أو الوصول إلى الشبكة، أو بيانات الاعتماد، أو الصلاحيات الممنوحة. إذا نجح، فتحقق من إعدادات ownCloud config/config.php، وامتداد PHP pdo_mysql، وما إذا كان PHP يستخدم المقبس المقصود أو اتصال TCP.
يشرح هذا الدليل كيفية تثبيت خادم ownCloud Server 10 الحالي باستخدام MySQL أو MariaDB على نظام Linux. تختلف أسماء الخدمات وأوامر الحزم باختلاف نظام التشغيل ونوع التثبيت. يُرجى عمل نسخة احتياطية من الإعدادات وقاعدة البيانات قبل تعديل إعدادات الإنتاج. لا تُشارك كلمة مرور قاعدة البيانات في أي مشكلة أو تلصقها في سجل أوامر عام.
ماذا يخبرك هذا الخطأ؟
هذه الرسالة عرضٌ وليست تشخيصًا. راجع سجلات ownCloud وسجلات خادم الويب أو PHP عند حدوث العطل. قد يُشير الاستثناء الأساسي إلى برنامج تشغيل مفقود، أو اتصال مرفوض، أو تسجيل دخول مرفوض، أو قاعدة بيانات غير معروفة. يتطلب دليل قاعدة بيانات ownCloud لنظام Linux pdo_mysqlإضافة PHP، ويُشير إلى أهمية إعدادات المقبس عند استخدام MySQL محليًا. يُوصي الدليل باختبار الوصول باستخدام عميل سطر أوامر MySQL.
| رسالة أو دليل | المنطقة المحتملة للتفتيش |
could not find driverأو خطأ في برنامج تشغيل PDO | لم يتم pdo_mysqlتفعيل بيئة تشغيل PHP للويب. |
SQLSTATE[HY000] [2002]أو "لا يمكن الاتصال" | تم إيقاف MySQL، أو أن المضيف أو المنفذ خاطئ، أو أن جدار الحماية يحظر TCP، أو أن مسار المقبس خاطئ. |
Access denied for user | لا تتطابق كلمة المرور أو مضيف الحساب أو إعدادات مصادقة MySQL. |
Unknown database | اسم قاعدة البيانات المُكوّنة به خطأ إملائي، أو مفقود، أو غير مرئي للحساب. |
قد تختلف رموز الخطأ الدقيقة باختلاف إصدارات PHP وMySQL وMariaDB ونظام التشغيل. اعتبرها مؤشرات، وتحقق من السبب باستخدام الفحوصات الموضحة أدناه. تشير وثائق MySQL الخاصة برفض الوصول إلى أن مطابقة الحساب والمضيف من الأسباب الشائعة.
هل يستطيع مضيف ownCloud الوصول إلى MySQL؟
تحقق مما إذا كان MySQL يعمل على خادم ownCloud، أو جهاز آخر، أو حاوية. على نظام Linux، تحقق من الخدمة. أسماء الوحدات الشائعة هي mysqlو mariadb؛ استخدم الوحدة المثبتة على خادمك.
sudo systemctl status mysql
sudo systemctl status mariadb
إذا كان النظام غير نشط، فافحص سجل العمليات أو سجل أخطاء قاعدة البيانات قبل إعادة تشغيله. قد يمنع خطأ في التكوين، أو امتلاء القرص، أو فشل استعادة قاعدة البيانات، أو تعارض في المنافذ، بدء التشغيل.
sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb
استبدل اسم الخدمة حسب الحاجة. تشغيل الخدمة لا يثبت قدرة ownCloud على المصادقة؛ تابع اختبار الحساب.
بالنسبة لقاعدة بيانات بعيدة، اختبر نظام أسماء النطاقات (DNS) ومنفذ TCP المُهيأ من مضيف ownCloud. يستمع MySQL عادةً على المنفذ 3306، مع العلم أن بعض عمليات النشر قد تستخدم منفذًا آخر.
getent hosts db.example.net
nc -vz db.example.net 3306
يشير فشل الفحص إلى وجود مشكلة في نظام أسماء النطاقات (DNS)، أو التوجيه، أو جدار الحماية، أو إعدادات مستمع قاعدة البيانات. اسمح بالاتصالات من خادم ownCloud عبر شبكة خاصة فقط كلما أمكن ذلك. لا تعرض MySQL للإنترنت العام كاختصار.
هل يعمل حساب قاعدة البيانات من مضيف ownCloud؟
شغّل عميل MySQL على خادم التطبيق بنفس اسم قاعدة البيانات، واسم المستخدم، وعنوان المضيف الذي سيستخدمه ownCloud. -pيُطلب منك إدخال كلمة المرور بشكل خاص، مما يجنّبك إدخالها في الأمر نفسه.
mysql -u oc_app -p -h localhost owncloud
بالنسبة لقاعدة البيانات البعيدة، استبدل localhostاسم المضيف الخاص بها. إذا نجح تسجيل الدخول، فقم بإجراء عملية تحقق بسيطة.
SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;
يؤكد هذا المصادقة الأساسية والوصول إلى قاعدة البيانات المحددة. في حال فشل العملية، اقرأ الخطأ بالتفصيل واسم المستخدم/المضيف الذي يُبلغه MySQL. يتعامل MySQL مع اسم المستخدم والمضيف معًا عند مطابقة الحساب. لاحظ أيضًا أن localhostنظام Linux يستخدم عادةً مقبس Unix، بينما 127.0.0.1يفرض نظام آخر استخدام TCP. اختبر نفس طريقة الاتصال التي يستخدمها إعداد ownCloud الخاص بك.
mysql -u oc_app -p -h 127.0.0.1 owncloud
هل إعدادات قاعدة بيانات ownCloud صحيحة؟
افحص الملف النشط config/config.phpفي دليل تثبيت ownCloud. يتضمن مرجع تكوين ownCloud قائمة بنوع قاعدة البيانات واسمها واسم المستخدم وكلمة المرور؛ كما يُظهر دليل قاعدة البيانات الخاص به المضيف وبادئة الجدول. يشبه تكوين MySQL النموذجي ما يلي:
'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
تحقق من وجود أخطاء إملائية، أو مسافات زائدة، أو كلمة مرور قديمة، أو اسم قاعدة بيانات مكتوب بأحرف كبيرة وصغيرة بشكل مختلف، أو مضيف يشير إلى خادم خاطئ. احتفظ بباقي الملف، بما في ذلك سر المثيل ودليل البيانات. لا تستبدل الإعدادات بالكامل بهذا المثال.
بعد التعديل، تأكد من أن الملف هو ملف PHP صالح باستخدام ملف PHP الثنائي الخاص بتثبيتك:
php -l /var/www/owncloud/config/config.php
قد يختلف مسار التثبيت لديك. قيّد الوصول إلى هذا الملف config.php؛ فهو يحتوي على بيانات اعتماد قاعدة البيانات وقيم حساسة أخرى.
هل تم تفعيل برنامج تشغيل MySQL الخاص بلغة PHP لتطبيق الويب؟
يتطلب دليل قاعدة بيانات ownCloud 10 ما يلي pdo_mysql: تحقق من إصدار PHP والوحدات النمطية المحملة:
php -v
php -m | grep -i pdo_mysql
إذا كانت الوحدة مفقودة، فقم بتثبيت حزمة MySQL PDO المناسبة لإصدار PHP لديك، ثم أعد تشغيل خادم الويب أو مجموعة PHP-FPM ذات الصلة. تختلف أسماء الحزم بين أنظمة Ubuntu وDebian وSUSE وRed Hat وصور الحاويات. قد لا تكون الوحدة المُفعّلة لـ PHP سطر الأوامر مُفعّلة لـ Apache أو PHP-FPM، لذا تحقق من إعدادات PHP لبيئة تشغيل الويب أيضًا. تجنب ترك صفحة تشخيص عامة تكشف معلومات إعدادات PHP.
هل من الممكن أن يكون إعداد المقبس أو المضيف خاطئًا؟
في نظام لينكس، قد يستخدم عميل MySQL مقبس يونكس localhost، بينما 127.0.0.1يستخدم عميل PHP بروتوكول TCP. إذا كان MySQL مثبتًا على نفس الجهاز، فتحقق مما إذا كان ملف PHP mysql.default_socketيشير إلى ملف المقبس الذي أنشأه خادم قاعدة البيانات. قارن إعدادات المقبس والمنفذ لخادم قاعدة البيانات مع إعدادات PHP وقيمة المضيف في ownCloud.
إذا كان MySQL يعمل عن بُعد، localhostفاستخدم جهاز ownCloud وليس خادم قاعدة البيانات. عيّن اسم مضيف قاعدة البيانات الذي يمكن الوصول إليه، وتأكد من أن MySQL يستمع على الواجهة المُخصصة. bind-addressقد يمنع جدار الحماية أو خاصية الوصول المحلي فقط الوصول عن بُعد حتى عند عمل أوامر قاعدة البيانات المحلية. قيّد الوصول إلى العنوان الخاص بخادم التطبيق.
هل يتطابق حساب MySQL والصلاحيات مع مضيف العميل؟
تتضمن حسابات MySQL اسم مستخدم ومكون مضيف. لذلك، يُعتبر كل من `<اسم المستخدم> 'oc_app'@'localhost'` و` 'oc_app'@'10.0.0.25'<اسم المضيف>` إدخالين مختلفين للحساب. استخدم اتصالًا إداريًا لفحص الحسابات المتاحة والصلاحيات الممنوحة للحساب الذي يجب أن يتطابق مع:
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';
إذا كان الحساب مفقودًا وقاعدة البيانات موجودة بالفعل، فأنشئ حسابًا مخصصًا وامنحه صلاحيات الوصول إلى قاعدة بيانات ownCloud فقط. استبدل قاعدة البيانات والمضيف وكلمة المرور النموذجية بقيمك الفعلية.
CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';
بالنسبة لقاعدة بيانات بعيدة، استخدم اسم المضيف الفعلي لخادم التطبيق في تعريف الحساب. تجنب استخدام اسم مضيف عام أو منح صلاحيات عامة كحل سريع، ولا تُشغّل ownCloud بصلاحيات المستخدم الجذر في MySQL. إذا كان الحساب موجودًا بالفعل، فراجع صلاحياته وأعد تعيين كلمة المرور عمدًا بدلًا من إنشاء حسابات مكررة. أعد اختبار تسجيل الدخول من خادم ownCloud.
كيف تتأكد من إتمام عملية الإصلاح؟
بعد تغيير عنصر واحد في كل مرة، تأكد من أن تسجيل الدخول إلى سطر أوامر MySQL يعمل من مضيف ownCloud، وأن بيئة تشغيل PHP الخاصة بالويب تعمل بشكل صحيح pdo_mysql، وأن سجل ownCloud لم يعد يسجل أي استثناءات في الاتصال. أعد تحميل الموقع وقم بإجراء عمليات قراءة وكتابة أساسية فقط بعد أن يصبح الموقع متاحًا مرة أخرى.
إذا نجح تسجيل الدخول عبر سطر الأوامر، ولكن ما زال ownCloud يفشل، قارن نموذج المضيف، والحساب، واسم قاعدة البيانات، وبيئة تشغيل PHP المستخدمة من قِبل عملية الويب مع الاختبار الناجح. تحقق من سجلات خادم الويب أو PHP-FPM وقت الطلب. بالنسبة للخادم المُثبَّت مسبقًا، أصلح إعداداته الحالية بعناية؛ لا تحذف قاعدة البيانات أو تُعِد تشغيل التثبيت كحل سريع للمشاكل.
للمزيد من المعلومات، يُرجى الاطلاع على دليل تكوين قاعدة بيانات ownCloud Server 10.16 واستكشاف الأخطاء وإصلاحها ، ودليل تكوين ownCloud 10.15 ، والأدلة الرسمية لـ MySQL حول استكشاف أخطاء الاتصال وإصلاحها وأخطاء رفض الوصول . تختلف أسماء الخدمات وأوامر الحزم والإعدادات الدقيقة باختلاف نظام التشغيل وبيئة النشر.