Pour isoler rapidement l'erreur « Échec de la connexion à la base de données » d'ownCloud 10, testez le compte MySQL, le nom de la base de données et l'hôte depuis le serveur ownCloud lui-même. Si la connexion échoue, commencez par résoudre les problèmes de disponibilité de MySQL, d'accès réseau, d'identifiants ou d'autorisations. Si la connexion réussit, vérifiez la configuration d'ownCloud config/config.php, l'extension PHP pdo_mysqlet assurez-vous que PHP utilise bien le type de connexion (socket ou TCP).
Ce guide concerne une installation existante d'ownCloud Server 10 utilisant MySQL ou MariaDB sous Linux. Les noms de services et les commandes varient selon le système d'exploitation et le type d'installation. Sauvegardez la configuration et la base de données avant de modifier les paramètres de production. Ne partagez jamais le mot de passe de la base de données dans un ticket ou ne le collez jamais dans une session de chat publique.
Que vous indique ce message d'erreur ?
Ce message indique un symptôme, et non un diagnostic. Consultez les journaux d'ownCloud et du serveur web ou de PHP au moment de l'incident. L'exception sous-jacente peut révéler un pilote manquant, une connexion refusée, une tentative d'authentification rejetée ou une base de données inconnue. Le guide d'ownCloud relatif aux bases de données Linux requiert pdo_mysqll'extension PHP et précise que la configuration du socket est importante lorsque MySQL est installé localement. Il est recommandé de tester l'accès avec le client en ligne de commande MySQL.
| Message ou indice | Zone probable à vérifier |
could not find driverou une erreur de pilote PDO | L'environnement d'exécution PHP Web n'est pas pdo_mysqlactivé. |
SQLSTATE[HY000] [2002]ou « Impossible de se connecter » | MySQL est arrêté, l'hôte ou le port est incorrect, un pare-feu bloque le protocole TCP ou le chemin du socket est incorrect. |
Access denied for user | Le mot de passe, l'hôte du compte ou les paramètres d'authentification MySQL ne correspondent pas. |
Unknown database | Le nom de la base de données configurée est mal orthographié, manquant ou invisible pour le compte. |
Les codes d'erreur exacts peuvent varier selon les versions de PHP, MySQL, MariaDB et du système d'exploitation. Considérez-les comme des indices et confirmez la cause à l'aide des vérifications ci-dessous. La documentation MySQL relative aux erreurs d'accès refusé indique que les problèmes de correspondance de compte et d'hôte sont des causes fréquentes.
L'hôte ownCloud peut-il accéder à MySQL ?
Déterminez si MySQL s'exécute sur le serveur ownCloud, une autre machine ou un conteneur. Sous Linux, consultez le service. Les noms d'unités courants sont `/etc/mysql` mysqlet `/etc /mysql`mariadb ; utilisez celui installé sur votre serveur.
sudo systemctl status mysql
sudo systemctl status mariadb
S'il est inactif, consultez le journal des erreurs ou le fichier journal de la base de données avant de le redémarrer. Une erreur de configuration, un disque plein, une récupération de base de données ayant échoué ou un conflit de ports peuvent empêcher le démarrage.
sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb
Remplacez le nom du service par le nom approprié. Un service en cours d'exécution ne prouve pas qu'ownCloud peut s'authentifier ; poursuivez avec le test du compte.
Pour une base de données distante, testez le DNS et le port TCP configuré depuis l'hôte ownCloud. MySQL écoute généralement sur le port 3306, mais certains déploiements peuvent utiliser un autre port.
getent hosts db.example.net
nc -vz db.example.net 3306
Un échec de vérification indique un problème de DNS, de routage, de pare-feu ou de configuration du serveur d'écoute de base de données. Dans la mesure du possible, autorisez les connexions uniquement depuis le serveur ownCloud via un réseau privé. Évitez d'exposer MySQL sur Internet.
Le compte de base de données fonctionne-t-il depuis l'hôte ownCloud ?
Exécutez le client MySQL sur le serveur d'applications avec le même nom de base de données, le même utilisateur et le même hôte de destination que ceux utilisés par ownCloud. Cette -poption permet une saisie privée du mot de passe, évitant ainsi de l'inclure directement dans la commande.
mysql -u oc_app -p -h localhost owncloud
Pour une base de données distante, remplacez localhostpar son nom d'hôte. Si la connexion réussit, effectuez une vérification sans risque :
SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;
Cela confirme l'authentification de base et l'accès à la base de données sélectionnée. En cas d'échec, consultez l'erreur exacte ainsi que le nom d'utilisateur et l'hôte renvoyés par MySQL. MySQL traite le nom d'utilisateur et l'hôte conjointement lors de la correspondance avec un compte. Notez également que localhostsous Linux, une socket Unix est généralement utilisée, tandis que 127.0.0.1sous HTTP, TCP est imposé. Testez la même méthode de connexion que celle utilisée par votre configuration ownCloud :
mysql -u oc_app -p -h 127.0.0.1 owncloud
Les paramètres de la base de données ownCloud sont-ils corrects ?
Examinez le fichier actif config/config.phpdans le répertoire d'installation d'ownCloud. La documentation de configuration d'ownCloud répertorie le type de base de données, son nom, l'utilisateur et le mot de passe ; son guide de base de données indique également l'hôte et le préfixe des tables. Une configuration MySQL typique ressemble à ceci :
'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
Vérifiez l'orthographe, les espaces superflus, la validité du mot de passe, l'orthographe du nom de la base de données (avec une casse différente) et l'adresse IP du serveur. Conservez le reste du fichier, y compris le secret de l'instance et le répertoire de données. Ne remplacez pas la totalité de la configuration par cet exemple.
Après modification, vérifiez que le fichier est un fichier PHP valide en utilisant le binaire PHP de votre installation :
php -l /var/www/owncloud/config/config.php
Votre chemin d'installation peut varier. Limitez l'accès à ce fichierconfig.php ; il contient des identifiants de base de données et d'autres données sensibles.
Le pilote MySQL de PHP est-il activé pour l'application web ?
Le guide de la base de données d'ownCloud 10 nécessitepdo_mysql : [instructions manquantes]. Vérifiez la version de PHP et les modules chargés :
php -v
php -m | grep -i pdo_mysql
Si le module est manquant, installez le paquet MySQL PDO correspondant à votre version de PHP, puis redémarrez ou rechargez le serveur web ou le pool PHP-FPM concerné. Les noms des paquets varient selon les distributions (Ubuntu, Debian, SUSE, Red Hat) et les images de conteneurs. Un module activé pour PHP en ligne de commande peut ne pas l'être pour Apache ou PHP-FPM ; vérifiez donc également la configuration PHP de l'environnement d'exécution web. Évitez de publier une page de diagnostic contenant des informations de configuration PHP.
Le paramètre du socket ou de l'hôte est-il incorrect ?
Sous Linux, un client MySQL peut utiliser un socket Unix pour les connexions réseau localhost, tandis que les connexions réseau 127.0.0.1utilisent TCP. Si MySQL est installé sur la même machine, vérifiez si la variable d'environnement PHP mysql.default_socketpointe bien vers le fichier socket créé par le serveur de base de données. Comparez les paramètres de socket et de port du serveur de base de données avec ceux de PHP et la valeur d'hôte d'ownCloud.
Si MySQL est distant, localhostil s'agit de la machine ownCloud et non du serveur de base de données. Configurez plutôt le nom d'hôte accessible de la base de données et assurez-vous que MySQL écoute sur l'interface prévue. Un pare-feu ou une restriction d'accès local bind-addresspeut empêcher l'accès distant, même si les commandes de base de données locales fonctionnent. Limitez l'accès à l'adresse privée du serveur d'applications.
Le compte MySQL et ses autorisations correspondent-ils à l'hôte client ?
Les comptes MySQL comprennent un nom d'utilisateur et un nom d'hôte. Par conséquent, 'oc_app'@'localhost'il 'oc_app'@'10.0.0.25's'agit d'entrées de compte distinctes. Utilisez une connexion d'administrateur pour examiner les comptes disponibles et les autorisations du compte correspondant.
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';
Si le compte est absent et que la base de données existe déjà, créez un compte dédié et accordez-lui des privilèges uniquement sur la base de données ownCloud. Remplacez la base de données, l'hôte et le mot de passe d'exemple par vos valeurs réelles.
CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';
Pour une base de données distante, utilisez l'adresse IP réelle du serveur d'applications dans la définition du compte. Évitez d'utiliser un hôte générique ou des privilèges globaux comme solution de fortune, et n'exécutez pas ownCloud en tant que root MySQL. Si le compte existe déjà, vérifiez ses droits d'accès et réinitialisez le mot de passe de manière appropriée plutôt que de créer des comptes dupliqués. Testez à nouveau la connexion depuis le serveur ownCloud.
Comment confirmez-vous la réparation ?
Après avoir modifié un élément à la fois, vérifiez que la connexion à la ligne de commande MySQL fonctionne depuis l'hôte ownCloud, que l'environnement d'exécution PHP web est opérationnel pdo_mysqlet que les journaux ownCloud ne signalent plus d'exception de connexion. Rechargez le site et effectuez une opération de lecture/écriture basique uniquement une fois l'instance de nouveau disponible.
Si la connexion en ligne de commande réussit mais qu'ownCloud échoue toujours, comparez le formulaire d'hôte, le compte, le nom de la base de données et l'environnement d'exécution PHP utilisés par le processus web avec le test fonctionnel. Consultez les journaux du serveur web ou de PHP-FPM au moment de la requête. Pour un serveur déjà installé, réparez soigneusement sa configuration existante ; ne supprimez pas la base de données et n'effectuez pas une nouvelle installation pour tenter de résoudre le problème rapidement.
Pour plus d'informations, consultez le guide de configuration et de dépannage de la base de données ownCloud Server 10.16 , le guide de configuration d'ownCloud 10.15 et les guides officiels de MySQL relatifs au dépannage des connexions et aux erreurs d'accès refusé . Les noms de service, les commandes et les paramètres exacts dépendent de votre système d'exploitation et de votre déploiement.