Cea mai rapidă metodă de a izola o eroare ownCloud 10 de tipul „Conectare la baza de date eșuată” este să testați același cont MySQL, același nume de bază de date și aceeași gazdă de pe serverul ownCloud. Dacă această conectare eșuează, remediați mai întâi disponibilitatea MySQL, accesul la rețea, acreditările sau granturile. Dacă reușește, verificați extensia ownCloud config/config.php, extensia PHP pdo_mysqlși dacă PHP utilizează socketul sau conexiunea TCP dorită.
Acest ghid prezintă o instalare existentă a ownCloud Server 10 folosind MySQL sau MariaDB pe Linux. Numele serviciilor și comenzile pachetelor variază în funcție de sistemul de operare și de tipul de instalare. Faceți o copie de rezervă a configurației și a bazei de date înainte de a edita setările de producție. Nu partajați niciodată parola bazei de date într-o problemă și nu o lipiți într-o transcriere publică a shell-ului.
Ce îți spune eroarea?
Mesajul este un simptom, nu un diagnostic. Citiți jurnalul ownCloud și jurnalul serverului web sau PHP în momentul erorii. Excepția subiacentă poate identifica un driver lipsă, o conexiune refuzată, o autentificare respinsă sau o bază de date necunoscută. Ghidul bazelor de date Linux al ownCloud necesită pdo_mysqlextensia PHP și menționează că setarea socketului este importantă atunci când MySQL este local. Recomandă testarea accesului cu clientul MySQL din linia de comandă.
| Mesaj sau indiciu | Zona probabilă de verificat |
could not find driversau o eroare a driverului PDO | Runtime-ul web PHP nu are pdo_mysqlactivat. |
SQLSTATE[HY000] [2002]sau „Nu se poate conecta” | MySQL este oprit, gazda sau portul este greșit, un firewall blochează TCP sau calea socketului este greșită. |
Access denied for user | Parola, gazda contului sau setările de autentificare MySQL nu corespund. |
Unknown database | Numele configurat al bazei de date este scris greșit, lipsește sau nu este vizibil pentru cont. |
Codurile de eroare exacte pot varia în funcție de PHP, MySQL, MariaDB și versiunile sistemului de operare. Tratați-le ca indicii și confirmați cauza cu verificările de mai jos. Documentația MySQL pentru acces refuzat menționează că potrivirea contului și a gazdei sunt cauze frecvente.
Poate gazda ownCloud să acceseze MySQL?
Află dacă MySQL rulează pe serverul ownCloud, pe o altă mașină sau pe un container. Pe Linux, verifică serviciul. Numele comune ale unităților sunt mysqlși mariadb; folosește-l pe cel instalat pe serverul tău:
sudo systemctl status mysql
sudo systemctl status mariadb
Dacă este inactiv, verificați jurnalul sau jurnalul de erori al bazei de date înainte de a-l reporni. O eroare de configurare, un disc plin, o recuperare eșuată a bazei de date sau un conflict de porturi pot împiedica pornirea:
sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb
Înlocuiți numele serviciului după cum este necesar. Un serviciu care rulează nu dovedește că ownCloud se poate autentifica; continuați cu testarea contului.
Pentru o bază de date la distanță, testați DNS-ul și portul TCP configurat de la gazda ownCloud. MySQL ascultă de obicei pe portul 3306, deși implementările pot utiliza un alt port:
getent hosts db.example.net
nc -vz db.example.net 3306
O verificare eșuată indică o configurație DNS, rutare, un firewall sau un listener de baze de date. Permiteți conexiuni doar de la serverul ownCloud printr-o rețea privată, acolo unde este posibil. Nu expuneți MySQL la internetul public ca o scurtătură.
Funcționează contul de bază de date de pe gazda ownCloud?
Rulați clientul MySQL pe serverul de aplicații cu același nume de bază de date, utilizator și gazdă destinație pe care ar trebui să le utilizeze ownCloud. Opțiunea -psolicită parola în mod privat; evită introducerea parolei în comandă:
mysql -u oc_app -p -h localhost owncloud
Pentru o bază de date la distanță, înlocuiți localhostcu numele gazdei sale. Dacă autentificarea funcționează, rulați o verificare inofensivă:
SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;
Aceasta confirmă autentificarea de bază și accesul la baza de date selectată. Dacă eșuează, citiți eroarea exactă și rapoartele MySQL privind numele de utilizator/gazda. MySQL tratează numele de utilizator și gazda împreună atunci când se potrivește cu un cont. De asemenea, rețineți că localhostpe Linux se folosește de obicei un socket Unix, în timp ce 127.0.0.1forțează TCP. Testați aceeași metodă de conectare utilizată de configurația dvs. ownCloud:
mysql -u oc_app -p -h 127.0.0.1 owncloud
Sunt setările bazei de date ownCloud corecte?
Inspectați fișierul activ config/config.phpdin directorul de instalare ownCloud. Referința de configurare ownCloud listează tipul bazei de date, numele, utilizatorul și parola; ghidul bazei de date arată, de asemenea, prefixul gazdei și al tabelului. O configurație MySQL tipică seamănă cu:
'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
Verificați dacă există greșeli de ortografie, spații albe accidentale, o parolă veche, un nume de bază de date cu majuscule diferite sau o gazdă care indică serverul greșit. Păstrați restul fișierului, inclusiv secretul instanței și directorul de date. Nu înlocuiți întreaga configurație cu acest exemplu.
După o editare, confirmați că fișierul este PHP valid folosind binarul PHP pentru instalarea dvs.:
php -l /var/www/owncloud/config/config.php
Calea de instalare poate fi diferită. Restricționați accesul la config.php; conține acreditările bazei de date și alte valori sensibile.
Este driverul MySQL din PHP activat pentru aplicația web?
Ghidul bazei de date ownCloud 10 necesită pdo_mysql. Verificați versiunea PHP și modulele încărcate:
php -v
php -m | grep -i pdo_mysql
Dacă modulul lipsește, instalați pachetul MySQL PDO corespunzător pentru versiunea dvs. PHP, apoi reporniți sau reîncărcați serverul web relevant sau pool-ul PHP-FPM. Numele pachetelor diferă între Ubuntu, Debian, SUSE, Red Hat și imaginile containerelor. Un modul activat pentru PHP din linia de comandă poate să nu fie activat pentru Apache sau PHP-FPM, așadar verificați și configurația PHP a runtime-ului web. Evitați să lăsați o pagină de diagnosticare publică care dezvăluie informații despre configurația PHP.
Ar putea fi greșită setarea socketului sau a gazdei?
Pe Linux, un client MySQL poate folosi un socket Unix pentru localhost, în timp ce 127.0.0.1folosește TCP. Dacă MySQL se află pe aceeași mașină, verificați dacă PHP mysql.default_socketindică fișierul socket pe care serverul bazei de date îl creează de fapt. Comparați setările socketului și portului serverului bazei de date cu setările PHP și valoarea host a ownCloud.
Dacă MySQL este la distanță, localhosteste mașina ownCloud, nu serverul bazei de date. Setați în schimb numele de gazdă accesibil al bazei de date și asigurați-vă că MySQL ascultă pe interfața dorită. Un firewall sau o opțiune local-only bind-addresspoate împiedica accesul la distanță chiar și atunci când comenzile bazei de date locale funcționează. Restricționați accesul la adresa privată a serverului de aplicații.
Contul și granturile MySQL corespund cu gazda clientului?
Conturile MySQL includ un nume de utilizator și o componentă gazdă. Prin urmare, 'oc_app'@'localhost'și 'oc_app'@'10.0.0.25'sunt intrări de cont diferite. Folosiți o conexiune administrativă pentru a inspecta conturile disponibile și granturile pentru contul care ar trebui să corespundă:
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';
Dacă contul lipsește și baza de date există deja, creați un cont dedicat și acordați-i privilegii doar asupra bazei de date ownCloud. Înlocuiți baza de date exemplu, gazda și parola cu valorile dvs. reale:
CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';
Pentru o bază de date la distanță, utilizați gazda reală a serverului de aplicații în definiția contului. Evitați o gazdă wildcard sau privilegii globale ca soluție rapidă și nu rulați ownCloud ca root MySQL. Dacă contul există deja, verificați acordarea acestuia și resetați parola în mod deliberat, în loc să creați conturi duplicate. Retestați datele de autentificare de pe serverul ownCloud.
Cum confirmați reparația?
După modificarea unui element pe rând, confirmați că aceeași autentificare în linia de comandă MySQL funcționează de pe gazda ownCloud, că runtime-ul web PHP are pdo_mysql, iar jurnalul ownCloud nu mai înregistrează o excepție de conexiune. Reîncărcați site-ul și efectuați o operațiune de citire și scriere de bază numai după ce instanța este din nou disponibilă.
Dacă autentificarea din linia de comandă reușește, dar ownCloud tot eșuează, comparați formularul exact al gazdei, contul, numele bazei de date și runtime-ul PHP utilizate de procesul web cu testul funcțional. Verificați jurnalele serverului web sau PHP-FPM în momentul solicitării. Pentru un server deja instalat, reparați cu atenție configurația existentă; nu ștergeți baza de date și nu rulați din nou instalarea ca o scurtătură de depanare.
Pentru referințe suplimentare, citiți ghidul de configurare și depanare a bazei de date ownCloud Server 10.16 , referința de configurare ownCloud 10.15 și ghidurile oficiale MySQL pentru depanarea conexiunilor și erorile de acces refuzat . Numele serviciilor, comenzile pachetelor și setările exacte depind de sistemul de operare și de implementare.