Si Nextcloud affiche une exception « Erreur de base de données » après une mise à jour, vérifiez l'erreur sous-jacente nextcloud.logavant de modifier les tables. Rétablissez d'abord la connectivité à la base de données ; si la mise à jour s'est interrompue, terminez-la occ upgradeet n'utilisez les commandes de réparation documentées que lorsque les journaux le justifient.
Identifier la défaillance réelle
Le message du navigateur indique un symptôme, et non un diagnostic. Nextcloud peut rencontrer des difficultés pour accéder à MySQL/MariaDB ou PostgreSQL, le compte de base de données peut ne plus être authentifié, ou encore le code et le schéma de l'application peuvent présenter des niveaux de mise à jour différents. La documentation officielle de dépannage de Nextcloud recommande de comparer l'identifiant de la requête ayant échoué avec celui du journal du serveur.
- Consignez l'heure, l'erreur complète du navigateur et tout identifiant de requête affiché. Ne publiez pas les entrées de journal privées sans supprimer les informations confidentielles et personnelles.
- Recherchez le répertoire de données configuré dans
config/config.php. Le fichier journal par défaut est data/nextcloud.log, mais les déploiements personnalisés peuvent consigner les données ailleurs.
- Sur une installation Linux classique, consultez les entrées récentes puis les journaux du service de base de données. Remplacez le chemin d'accès à Nextcloud par le vôtre :
sudo tail -n 100 /var/www/nextcloud/data/nextcloud.log
sudo journalctl -u mariadb --since '30 minutes ago'
La seconde commande s'applique uniquement aux hôtes exécutant MariaDB sous systemd ; pour les autres déploiements, utilisez les journaux du service PostgreSQL ou du conteneur. Recherchez le SQLSTATEcode de l'exception et la première cause liée à la base de données plutôt que de vous fier à la dernière ligne de la trace de pile.
| Indice de journalisation | Premier contrôle utile |
SQLSTATE[HY000] [2002] | Processus de base de données, nom d'hôte, port, chemin du socket ou accès au fichier SQLite ; l'interprétation est déterminée par le pilote. |
SQLSTATE[HY000] [1040] | Épuisement des connexions MySQL/MariaDB et sessions actives. |
MySQL server has gone away | Redémarrages de bases de données, déconnexions, pression sur les ressources et journaux du serveur. |
| Authentification ou accès refusé | Compte de base de données, mot de passe, accès réseau et autorisations. |
| Table, relation ou colonne manquante | Vérifier si la mise à niveau de la base de données est terminée et si le code installé correspond à son schéma. |
Les trois premiers exemples sont traités dans la documentation des erreurs courantes de Nextcloud. Un message d'erreur indiquant l'absence d'une table ne signifie pas que vous pouvez la créer manuellement : identifiez d'abord la cause exacte de l'échec de la migration.
Protégez l'instance avant d'appliquer un correctif
Avant de tenter une nouvelle migration, conservez une sauvegarde de votre base de données, incluant la configuration et les données de Nextcloud. La procédure de sauvegarde officielle inclut également les applications et thèmes personnalisés, le cas échéant. Assurez-vous que la sauvegarde corresponde à un point précis dans le temps ; une sauvegarde contenant uniquement le code ne peut pas récupérer une base de données partiellement modifiée.
- Suspendez la synchronisation et les tâches en arrière-plan pendant une fenêtre de récupération lorsque cela est possible, en particulier lorsque des écritures ou des mises à niveau de la base de données sont impliquées.
- Conservez une trace des anciennes et nouvelles versions de Nextcloud, du moteur/version de la base de données, de la version de PHP et de la méthode de mise à jour.
- Ne supprimez pas les tables de la base de données, n'importez pas un schéma vide, n'exécutez pas de requêtes SQL aléatoires provenant de forums, et ne restaurez pas à plusieurs reprises un seul composant d'une sauvegarde en plusieurs parties.
Les commandes ci-dessous supposent une installation Debian/Ubuntu standard /var/www/nextcloud, avec www-datacomme compte serveur web. Exécutez-les occen tant qu'utilisateur HTTP approprié ; les installations par paquet, Docker, Snap, AIO et les installations gérées ont des chemins et des méthodes d'exécution différents. La documentation de la commande occ explique ces exigences.
Rétablir la connectivité de la base de données avant la migration
Vérifiez les paramètres de connexion au service de base de données et à Nextcloud
Si les journaux indiquent un refus de connexion, une socket inaccessible ou un serveur indisponible, vérifiez d'abord que le service de base de données existant est en cours d'exécution. Voici des vérifications alternatives au niveau de l'hôte, et non une liste à exécuter sans discernement :
sudo systemctl status mariadb
sudo systemctl status postgresql
Pour un serveur de base de données distinct, vérifiez également le DNS, les règles de pare-feu, le port sélectionné et l'accessibilité réseau depuis l'hôte ou le conteneur de l'application Nextcloud. Examinez les config/config.phpparamètres suivants : dbtype` hostname` dbhost, dbname` port` et `socket` dbuser. La documentation relative aux paramètres de configuration explique les noms d'hôtes, les ports et la syntaxe des sockets Unix. Ne copiez jamais ces informations dbpassworddans des tickets publics ou des commandes shell qui les exposeraient dans l'historique.
Si le mot de passe de la base de données a été modifié ou si des identifiants ont été changés pendant le déploiement, corrigez cette incohérence conformément à votre procédure de gestion des secrets. Si le serveur signale un nombre excessif de connexions, examinez les connexions actives et la cause de cette accumulation avant d'envisager des modifications de capacité. Une commande d'indexation ne résoudra pas une interruption de connexion.
Vérifiez la compatibilité d'exécution après la mise à jour.
Une mise à jour simultanée de PHP ou du serveur de base de données peut rendre inutilisable une installation fonctionnelle. Comparez la version cible de Nextcloud avec sa configuration système requise et ses notes de version officielles plutôt que de supposer que toutes les versions de pilotes et de serveurs actuellement installées restent compatibles. D'après la documentation de Nextcloud 35 consultée, PHP 8.3 à 8.5 est pris en charge ; les versions de base de données compatibles sont documentées séparément. Les versions antérieures ont des limitations différentes.
Vérifiez également que le pilote de base de données PHP requis par le moteur sélectionné est activé dans les environnements PHP en ligne de commande et web. Après une migration de schéma, ne revenez pas à une version antérieure du serveur de base de données : restaurez-la uniquement à partir d’une sauvegarde compatible et cohérente.
Terminez ou réparez la mise à niveau interrompue de Nextcloud
Une fois la base de données accessible et une sauvegarde effectuée, accédez au répertoire d'installation de Nextcloud et vérifiez son état :
cd /var/www/nextcloud
sudo -E -u www-data php occ status
Si Nextcloud signale qu'une mise à niveau est en attente ou incomplète, suivez la procédure de mise à niveau recommandée pour les versions source et cible installées. Pour une installation manuelle classique, exécutez :
sudo -E -u www-data php occ upgrade
N’interrompez pas la commande et n’exécutez aucun processus de mise à niveau simultané. Consultez la sortie : une migration réussie est différente d’une exception de connexion à la base de données. La documentation de mise à niveau manuelle de Nextcloud fournit des recommandations explicites occ upgradeen cas de blocage du processus web et maintenance:repairsi le chemin de mise à niveau nécessite une réparation.
sudo -E -u www-data php occ maintenance:repair
À utiliser maintenance:repairaprès analyse de l'échec ; cette méthode ne remplace pas la correction d'identifiants incorrects, d'une base de données arrêtée ou d'une incompatibilité d'exécution. En cas occ upgraded'échec lors d'une migration SQL spécifique, enregistrez l'exception exacte et recherchez une solution adaptée à la version ou restaurez la sauvegarde correspondante complète plutôt que d'expérimenter avec le DDL manuel.
Ne traitez les avertissements de schéma qu'après une mise à niveau réussie.
Certaines migrations sont volontairement différées. Sur une instance fonctionnelle, l'interface d'administration peut demander des colonnes, des index ou des clés primaires optionnels. Ces commandes permettent d'effectuer une simulation (simulation) lorsque la version le prend en charge :
sudo -E -u www-data php occ db:add-missing-indices --dry-run
sudo -E -u www-data php occ db:add-missing-columns --dry-run
sudo -E -u www-data php occ db:add-missing-primary-keys --dry-run
N'exécutez la commande correspondante --dry-runque si le problème consigné ou la vérification administrative l'exige et que la modification proposée a été validée. Ces opérations de maintenance peuvent être longues sur les bases de données volumineuses. Nextcloud 35 fournit des informations supplémentaires à ce sujetdb:schema:check ; ne présumez pas que cette fonctionnalité est disponible sur les versions antérieures. Consultez la documentation de référence des commandes de la base de données pour connaître le comportement spécifique à chaque version.
Vérifier la récupération et rouvrir l'accès
- Répétez l'opération
sudo -E -u www-data php occ status. Vérifiez que la version installée correspond à la version prévue, qu'aucune mise à niveau n'est requise et qu'aucune nouvelle exception SQL fatale n'est produite.
- Si le mode maintenance est toujours activé et que la mise à niveau s'est terminée avec succès , désactivez-le avec
sudo -E -u www-data php occ maintenance:mode --off.
- Ouvrez l'interface Web, connectez-vous, listez les fichiers et effectuez un petit chargement et un téléchargement autorisés. Surveillez
nextcloud.logl'apparition de nouvelles exceptions dans la base de données pendant ces opérations.
- Reprenez les tâches planifiées et la synchronisation des clients, puis vérifiez les paramètres d'administration pour détecter d'éventuels avertissements de base de données restants.
Si la même exception de base de données se reproduit, interrompez les migrations en cours et collectez l'ID de la requête, le texte SQLSTATE, le journal du serveur de base de données, la paire de versions et le occrésultat de l'erreur. Ces informations permettront de déterminer si le problème persiste en raison d'un souci de connectivité, d'une incompatibilité logicielle ou d'une migration ayant échoué. Une connexion réussie ne garantit pas à elle seule le bon fonctionnement de toutes les tâches en arrière-plan et requêtes de base de données.