Najszybszym sposobem na odizolowanie błędu ownCloud 10 „Nie udało się połączyć z bazą danych” jest przetestowanie tego samego konta MySQL, nazwy bazy danych i hosta na serwerze ownCloud. Jeśli logowanie się nie powiedzie, najpierw sprawdź dostępność MySQL, dostęp do sieci, dane uwierzytelniające lub uprawnienia. Jeśli się powiedzie, sprawdź rozszerzenie ownCloud config/config.php, PHP pdo_mysqli czy PHP używa właściwego gniazda lub połączenia TCP.
Ten przewodnik dotyczy istniejącej instalacji serwera ownCloud 10 z MySQL lub MariaDB w systemie Linux. Nazwy usług i polecenia pakietów różnią się w zależności od systemu operacyjnego i typu instalacji. Przed edycją ustawień produkcyjnych należy wykonać kopię zapasową konfiguracji i bazy danych. Nigdy nie udostępniaj hasła do bazy danych w zgłoszeniu ani nie wklejaj go do publicznego transkryptu powłoki.
Co mówi błąd?
Komunikat jest objawem, a nie diagnozą. Przeczytaj dziennik ownCloud oraz dziennik serwera WWW lub PHP w momencie wystąpienia awarii. Wyjątek może wskazywać na brakujący sterownik, odrzucone połączenie, odrzucone logowanie lub nieznaną bazę danych. Przewodnik ownCloud po bazach danych Linux wymaga pdo_mysqlrozszerzenia PHP i zaznacza, że ustawienie gniazda ma znaczenie, gdy MySQL jest lokalny. Zaleca się przetestowanie dostępu za pomocą klienta wiersza poleceń MySQL.
| Wiadomość lub wskazówka | Prawdopodobny obszar do sprawdzenia |
could not find driverlub błąd sterownika PDO | Środowisko wykonawcze PHP nie jest pdo_mysqlwłączone. |
SQLSTATE[HY000] [2002]lub „Nie można nawiązać połączenia” | MySQL jest zatrzymany, host lub port jest nieprawidłowy, zapora blokuje protokół TCP lub ścieżka gniazda jest nieprawidłowa. |
Access denied for user | Hasło, host konta lub ustawienia uwierzytelniania MySQL nie są zgodne. |
Unknown database | Skonfigurowana nazwa bazy danych jest błędnie napisana, brakuje jej lub nie jest widoczna dla konta. |
Dokładne kody błędów mogą się różnić w zależności od wersji PHP, MySQL, MariaDB i systemu operacyjnego. Potraktuj je jako wskazówki i potwierdź przyczynę, wykonując poniższe czynności. W dokumentacji dotyczącej odmowy dostępu do MySQL zaznaczono, że dopasowanie konta i hosta jest częstą przyczyną.
Czy host ownCloud może uzyskać dostęp do MySQL?
Sprawdź, czy MySQL działa na serwerze ownCloud, innym komputerze czy kontenerze. W systemie Linux sprawdź usługę. Typowe nazwy jednostek to mysqli mariadb; użyj tej zainstalowanej na serwerze:
sudo systemctl status mysql
sudo systemctl status mariadb
Jeśli jest nieaktywny, przed ponownym uruchomieniem sprawdź dziennik błędów dziennika lub bazy danych. Błąd konfiguracji, zapełniony dysk, nieudane odzyskiwanie bazy danych lub konflikt portów mogą uniemożliwić uruchomienie:
sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb
Zmień nazwę usługi odpowiednio. Uruchomiona usługa nie dowodzi, że ownCloud może uwierzytelnić konto. Kontynuuj testowanie konta.
W przypadku zdalnej bazy danych przetestuj DNS i skonfigurowany port TCP z hosta ownCloud. MySQL zazwyczaj nasłuchuje na porcie 3306, chociaż wdrożenia mogą korzystać z innego portu:
getent hosts db.example.net
nc -vz db.example.net 3306
Nieudane punkty kontrolne wskazują na DNS, routing, zaporę sieciową lub konfigurację nasłuchu bazy danych. W miarę możliwości zezwalaj na połączenia tylko z serwera ownCloud przez sieć prywatną. Nie udostępniaj bazy danych MySQL w publicznym internecie jako skrótu.
Czy konto bazy danych działa z poziomu hosta ownCloud?
Uruchom klienta MySQL na serwerze aplikacji z tą samą nazwą bazy danych, użytkownikiem i hostem docelowym, z których powinien korzystać ownCloud. -pOpcja ta wyświetla monity prywatnie, co pozwala uniknąć podawania hasła w samym poleceniu:
mysql -u oc_app -p -h localhost owncloud
W przypadku zdalnej bazy danych zastąp localhostją nazwą hosta. Jeśli logowanie się powiedzie, uruchom nieszkodliwą weryfikację:
SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;
Potwierdza to podstawowe uwierzytelnienie i dostęp do wybranej bazy danych. Jeśli się nie powiedzie, odczytaj dokładny błąd oraz raport MySQL dotyczący nazwy użytkownika i hosta. MySQL traktuje nazwę użytkownika i hosta łącznie podczas dopasowywania konta. Należy również pamiętać, że localhostw systemie Linux zazwyczaj używane jest gniazdo Unix, podczas gdy 127.0.0.1wymuszany jest protokół TCP. Przetestuj tę samą metodę połączenia, której używa Twoja konfiguracja ownCloud:
mysql -u oc_app -p -h 127.0.0.1 owncloud
Czy ustawienia bazy danych ownCloud są prawidłowe?
Sprawdź aktywne elementy config/config.phpw katalogu instalacyjnym ownCloud. Dokumentacja konfiguracji ownCloud zawiera ustawienia typu bazy danych, nazwy, użytkownika i hasła; przewodnik po bazie danych zawiera również prefiks hosta i tabeli. Typowa konfiguracja MySQL wygląda następująco:
'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
Sprawdź błędy ortograficzne, przypadkowe spacje, nieaktualne hasło, nazwę bazy danych z inną wielkością liter lub host wskazujący na niewłaściwy serwer. Zachowaj resztę pliku, w tym klucz tajny instancji i katalog danych. Nie zastępuj całej konfiguracji tym przykładem.
Po edycji sprawdź, czy plik jest prawidłowym PHP, korzystając z pliku binarnego PHP dla swojej instalacji:
php -l /var/www/owncloud/config/config.php
Ścieżka instalacji może być inna. Ogranicz dostęp do pliku config.php; zawiera on dane uwierzytelniające bazy danych i inne poufne wartości.
Czy sterownik MySQL PHP jest włączony dla aplikacji internetowej?
Przewodnik po bazie danych ownCloud 10 wymaga pdo_mysql. Sprawdź wersję PHP i załadowane moduły:
php -v
php -m | grep -i pdo_mysql
Jeśli brakuje modułu, zainstaluj odpowiedni pakiet MySQL PDO dla swojej wersji PHP, a następnie uruchom ponownie lub przeładuj odpowiedni serwer WWW lub pulę PHP-FPM. Nazwy pakietów różnią się w systemach Ubuntu, Debian, SUSE, Red Hat i obrazach kontenerów. Moduł z włączoną obsługą PHP z poziomu wiersza poleceń może nie być włączony dla Apache lub PHP-FPM, dlatego sprawdź również konfigurację PHP środowiska uruchomieniowego. Unikaj pozostawiania publicznej strony diagnostycznej, która ujawnia informacje o konfiguracji PHP.
Czy ustawienia gniazda lub hosta mogą być nieprawidłowe?
W systemie Linux klient MySQL może używać gniazda Unix localhost, podczas gdy 127.0.0.1używa protokołu TCP. Jeśli MySQL znajduje się na tym samym komputerze, sprawdź, czy PHP mysql.default_socketwskazuje na plik gniazda, który faktycznie tworzy serwer bazy danych. Porównaj ustawienia gniazda i portu serwera bazy danych z ustawieniami PHP i wartością hosta ownCloud.
Jeśli MySQL jest zdalny, localhostto jest to maszyna ownCloud, a nie serwer bazy danych. Zamiast tego ustaw dostępną nazwę hosta bazy danych i upewnij się, że MySQL nasłuchuje na docelowym interfejsie. Zapora sieciowa lub interfejs lokalny bind-addressmogą uniemożliwić zdalny dostęp, nawet gdy lokalne polecenia bazy danych działają. Ogranicz dostęp do prywatnego adresu serwera aplikacji.
Czy konto MySQL i uprawnienia odpowiadają hostowi klienta?
Konta MySQL zawierają nazwę użytkownika i komponent hosta. W związku z tym 'oc_app'@'localhost'i 'oc_app'@'10.0.0.25'to różne wpisy kont. Użyj połączenia administracyjnego, aby sprawdzić dostępne konta i uprawnienia dla konta, które powinny się zgadzać:
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';
Jeśli konto nie istnieje, a baza danych już istnieje, utwórz dedykowane konto i nadaj mu uprawnienia tylko do bazy danych ownCloud. Zastąp przykładową bazę danych, hosta i hasło swoimi rzeczywistymi wartościami:
CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';
W przypadku zdalnej bazy danych użyj rzeczywistego hosta serwera aplikacji w definicji konta. Unikaj używania symbolu wieloznacznego jako hosta lub uprawnień globalnych jako szybkiego rozwiązania i nie uruchamiaj ownCloud jako root MySQL. Jeśli konto już istnieje, sprawdź jego uprawnienia i zresetuj hasło celowo, zamiast tworzyć duplikaty kont. Przetestuj ponownie logowanie z serwera ownCloud.
Jak potwierdzasz naprawę?
Po zmianie jednego elementu, sprawdź, czy to samo logowanie z wiersza poleceń MySQL działa z hosta ownCloud, czy środowisko uruchomieniowe PHP ma pdo_mysql, a log ownCloud nie rejestruje już wyjątku połączenia. Przeładuj witrynę i wykonaj podstawową operację odczytu i zapisu dopiero po ponownym udostępnieniu instancji.
Jeśli logowanie z wiersza poleceń powiedzie się, ale ownCloud nadal nie działa, porównaj dokładny formularz hosta, konto, nazwę bazy danych i środowisko uruchomieniowe PHP używane przez proces webowy z działającym testem. Sprawdź logi serwera webowego lub PHP-FPM w momencie żądania. W przypadku już zainstalowanego serwera, ostrożnie napraw jego istniejącą konfigurację; nie usuwaj bazy danych ani nie uruchamiaj ponownie instalacji jako skrótu rozwiązywania problemów.
Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem konfiguracji i rozwiązywania problemów bazy danych ownCloud Server 10.16 , dokumentem referencyjnym konfiguracji ownCloud 10.15 oraz oficjalnymi przewodnikami MySQL dotyczącymi rozwiązywania problemów z połączeniem i błędami odmowy dostępu . Nazwy usług, polecenia pakietów i dokładne ustawienia zależą od systemu operacyjnego i wdrożenia.