Il modo più rapido per isolare un errore "Impossibile connettersi al database" di ownCloud 10 è testare lo stesso account MySQL, nome del database e host dal server ownCloud stesso. Se l'accesso fallisce, correggere prima la disponibilità di MySQL, l'accesso alla rete, le credenziali o i permessi. Se ha successo, verificare la configurazione di ownCloud config/config.php, l'estensione di PHP pdo_mysqle se PHP sta utilizzando il socket o la connessione TCP previsti.
Questa guida si riferisce a un'installazione esistente di ownCloud Server 10 con MySQL o MariaDB su Linux. I nomi dei servizi e i comandi dei pacchetti variano a seconda del sistema operativo e del tipo di installazione. Eseguire un backup della configurazione e del database prima di modificare le impostazioni di produzione. Non condividere mai la password del database in una segnalazione di problema né incollarla in una trascrizione pubblica della shell.
Cosa ti dice l'errore?
Il messaggio indica un sintomo, non una diagnosi. Leggi il log di ownCloud e il log del server web o di PHP al momento dell'errore. L'eccezione sottostante potrebbe indicare un driver mancante, una connessione rifiutata, un accesso respinto o un database sconosciuto. La guida di ownCloud per i database Linux richiede pdo_mysqll'estensione di PHP e sottolinea che l'impostazione del socket è importante quando MySQL è locale. Si consiglia di testare l'accesso con il client da riga di comando di MySQL.
| Messaggio o indizio | Area probabile da controllare |
could not find drivero un errore del driver PDO | Il runtime PHP web non è pdo_mysqlabilitato. |
SQLSTATE[HY000] [2002]oppure “Impossibile connettersi” | MySQL è inattivo, l'host o la porta sono errati, un firewall blocca TCP oppure il percorso del socket è errato. |
Access denied for user | La password, l'host dell'account o le impostazioni di autenticazione MySQL non corrispondono. |
Unknown database | Il nome del database configurato è errato, mancante o non visibile all'account. |
I codici di errore esatti possono variare a seconda delle versioni di PHP, MySQL, MariaDB e del sistema operativo. Considerateli come indizi e confermate la causa con i controlli seguenti. La documentazione di MySQL relativa agli accessi negati indica che la mancata corrispondenza tra account e host è una causa comune.
L'host di ownCloud può raggiungere MySQL?
Scopri se MySQL è in esecuzione sul server ownCloud, su un'altra macchina o in un container. Su Linux, controlla il servizio. I nomi delle unità più comuni sono mysqle mariadb; usa quello installato sul tuo server:
sudo systemctl status mysql
sudo systemctl status mariadb
Se è inattivo, prima di riavviarlo, controlla il registro degli errori del database o del journal. Un errore di configurazione, un disco pieno, un ripristino del database non riuscito o un conflitto di porte potrebbero impedire l'avvio.
sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb
Sostituisci il nome del servizio con quello appropriato. Un servizio in esecuzione non garantisce l'autenticazione di ownCloud; procedi con il test dell'account.
Per un database remoto, testare il DNS e la porta TCP configurata dall'host ownCloud. MySQL è generalmente in ascolto sulla porta 3306, sebbene le implementazioni possano utilizzare una porta diversa:
getent hosts db.example.net
nc -vz db.example.net 3306
Un controllo fallito indica un problema con DNS, routing, firewall o configurazione del listener del database. Ove possibile, consenti le connessioni solo dal server ownCloud tramite una rete privata. Non esporre MySQL a Internet pubblico come scorciatoia.
L'account del database funziona dall'host di ownCloud?
Avvia il client MySQL sul server applicativo con lo stesso nome del database, utente e host di destinazione che ownCloud dovrebbe utilizzare. L' -popzione richiede la password in privato, evitando di inserirla direttamente nel comando:
mysql -u oc_app -p -h localhost owncloud
Per un database remoto, sostituisci localhostcon il suo nome host. Se l'accesso funziona, esegui una verifica innocua:
SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;
Questo conferma l'autenticazione di base e l'accesso al database selezionato. In caso di errore, leggere l'errore esatto e il nome utente/host riportati da MySQL. MySQL considera nome utente e host insieme quando associa un account. Si noti inoltre che localhostsu Linux viene comunemente utilizzato un socket Unix, mentre 127.0.0.1forza il protocollo TCP. Testare lo stesso metodo di connessione utilizzato nella configurazione di ownCloud:
mysql -u oc_app -p -h 127.0.0.1 owncloud
Le impostazioni del database di ownCloud sono corrette?
Verifica la configurazione attiva config/config.phpnella directory di installazione di ownCloud. Il manuale di riferimento di ownCloud elenca il tipo di database, il nome, l'utente e la password; la guida al database mostra anche l'host e il prefisso delle tabelle. Una tipica configurazione MySQL è simile a questa:
'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
Verifica la presenza di errori di ortografia, spazi bianchi accidentali, password obsolete, nomi di database con maiuscole e minuscole diverse o host che puntano al server sbagliato. Conserva il resto del file, inclusi il segreto dell'istanza e la directory dei dati. Non sostituire l'intera configurazione con questo esempio.
Dopo la modifica, verifica che il file sia un codice PHP valido utilizzando il binario PHP della tua installazione:
php -l /var/www/owncloud/config/config.php
Il percorso di installazione potrebbe essere diverso. Limita l'accesso a config.php; contiene le credenziali del database e altri valori sensibili.
Il driver MySQL di PHP è abilitato per l'applicazione web?
La guida al database di ownCloud 10 richiede pdo_mysql. Verifica la versione di PHP e i moduli caricati:
php -v
php -m | grep -i pdo_mysql
Se il modulo non è presente, installa il pacchetto MySQL PDO corrispondente alla tua versione di PHP, quindi riavvia o ricarica il server web o il pool PHP-FPM pertinente. I nomi dei pacchetti variano a seconda della distribuzione Ubuntu, Debian, SUSE, Red Hat e delle immagini container. Un modulo abilitato per PHP da riga di comando potrebbe non essere abilitato per Apache o PHP-FPM, quindi verifica anche la configurazione PHP del runtime web. Evita di lasciare una pagina di diagnostica pubblica che riveli informazioni sulla configurazione di PHP.
È possibile che la configurazione del socket o dell'host sia errata?
Su Linux, un client MySQL può utilizzare un socket Unix per localhost, mentre 127.0.0.1usa TCP. Se MySQL si trova sulla stessa macchina, verifica se PHP mysql.default_socketpunta al file socket effettivamente creato dal server di database. Confronta le impostazioni di socket e porta del server di database con le impostazioni di PHP e il valore host di ownCloud.
Se MySQL è remoto, localhostil nome host è la macchina ownCloud e non il server di database. Imposta invece il nome host del database raggiungibile e assicurati che MySQL sia in ascolto sull'interfaccia prevista. Un firewall o un'impostazione di accesso solo locale bind-addresspossono impedire l'accesso remoto anche quando i comandi del database locale funzionano. Limita l'accesso all'indirizzo IP privato del server applicativo.
L'account MySQL e i relativi permessi corrispondono a quelli dell'host client?
Gli account MySQL includono un nome utente e un componente host. Pertanto, 'oc_app'@'localhost'e 'oc_app'@'10.0.0.25'sono voci di account diverse. Utilizza una connessione amministrativa per esaminare gli account disponibili e le autorizzazioni per l'account che dovrebbe corrispondere:
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';
Se l'account non è presente ma il database esiste già, crea un account dedicato e concedigli i privilegi solo sul database ownCloud. Sostituisci il database, l'host e la password di esempio con i tuoi valori effettivi:
CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';
Per un database remoto, utilizzare l'host effettivo del server applicativo nella definizione dell'account. Evitare l'utilizzo di host jolly o privilegi globali come soluzione rapida e non eseguire ownCloud come root di MySQL. Se l'account esiste già, verificarne le autorizzazioni e reimpostare la password in modo mirato, anziché creare account duplicati. Riprovare l'accesso dal server ownCloud.
Come si fa a confermare la riparazione?
Dopo aver modificato un elemento alla volta, verificare che lo stesso login da riga di comando MySQL funzioni dall'host ownCloud, che il runtime PHP web sia attivo pdo_mysqle che il log di ownCloud non registri più un'eccezione di connessione. Ricaricare il sito ed eseguire un'operazione di lettura e scrittura di base solo dopo che l'istanza è nuovamente disponibile.
Se l'accesso da riga di comando ha successo ma ownCloud continua a non funzionare, confronta esattamente il modulo host, l'account, il nome del database e il runtime PHP utilizzati dal processo web con quelli del test funzionante. Controlla i log del server web o di PHP-FPM al momento della richiesta. Per un server già installato, ripristina con attenzione la configurazione esistente; non eliminare il database né reinstallare il sistema come soluzione rapida per la risoluzione dei problemi.
Per ulteriori informazioni, consultare la guida alla configurazione e alla risoluzione dei problemi del database di ownCloud Server 10.16 , il riferimento alla configurazione di ownCloud 10.15 e le guide ufficiali di MySQL sulla risoluzione dei problemi di connessione e sugli errori di accesso negato . I nomi dei servizi, i comandi dei pacchetti e le impostazioni esatte dipendono dal sistema operativo e dalla distribuzione.