Hier soir, j’ai rencontré un gros problème sur un forum et j’ai dû tout recréer. Mais lors de la restauration, une erreur est survenue et l’opération a échoué. Voici le message d’erreur :
ERROR: could not create unique index "index_users_on_username_lower"
DETAIL: Key (username_lower)=(lea) is duplicated.
EXCEPTION: psql failed: DETAIL: Key (username_lower)=(lea) is duplicated.
Je pense que cela peut être lié à la connexion via Twitter, mais est-ce que la restauration peut modifier un nom username_lower s’il est en double ? Je ne pense pas pouvoir le modifier dans le fichier SQL (il est assez volumineux) et le réimporter.
C’était un problème différent : le serveur n’a pas pu accéder à pups.git, avec l’erreur « Could not resolve host: github.com ». J’ai essayé certaines solutions trouvées hier soir, mais cela n’a pas fonctionné.
Avec la restauration, je pense qu’il ne s’agit que d’un problème lié à un seul nom d’utilisateur (peut-être lié à la création de compte en un clic via Twitter ou quelque chose de similaire). J’essaie de le corriger manuellement, mais gérer un fichier SQL de 1 Go n’est pas idéal.
Édition : avec le logiciel vim, j’ai pu modifier le fichier SQL et trouver les bonnes lignes. La restauration a fonctionné. Je dois simplement tout re-cuire, et tout devrait être prêt.
Il y avait un nom d’utilisateur « Lea » et un nom d’utilisateur « lea ». C’est étrange que Discourse ait permis cela. C’est un forum assez ancien (juin 2014), et je l’ai mis à jour fréquemment, donc cela était peut-être dû à une version spécifique.
Je suis vraiment nul en SQL. Pour trouver la bonne table, j’ai cherché username_lower,. Cela m’a dirigé vers la table des utilisateurs, puis j’ai recherché « lea ». J’ai modifié les deux entrées de Lea. C’était probablement beaucoup plus simple, mais rappelez-vous que je suis nul en SQL, surtout quand les fichiers font 1,5 Go. Enregistrez le fichier.
Comprimez le fichier dump.sql avec 7zip. Vous devriez avoir un nouveau fichier nommé : dump.sql.gz.
Créez un nouveau dossier dans /var/discourse/shared/standalone/backups/default/. J’ai utilisé « test ».
Si vous avez une bonne connexion Internet, téléchargez le dossier uploads que vous avez obtenu en décompressant votre fichier de sauvegarde, et placez-le dans /var/discourse/shared/standalone/backups/default/test/.
6.1 Si vous n’avez pas une bonne connexion comme moi, vous devez utiliser votre serveur. Notez le nom de votre fichier de sauvegarde et utilisez cette commande : tar xvzf /var/discourse/shared/standalone/backups/default/yourbackupfile.tar.gz -C /var/discourse/shared/standalone/backups/default/test.
6.2 Dans le dossier test, vous aurez un fichier dump.sql.gz et un dossier uploads. C’est bon.
Téléversez le fichier dump.sql.gz de votre dossier test pour remplacer le fichier dump.sql.gz corrompu.
Sur votre serveur : allez dans cd /var/discourse/shared/standalone/backups/default/test.
Vous devez recréer votre fichier de sauvegarde. Vous devez utiliser le nom exact de l’ancien fichier de sauvegarde : tar -czvf yourbackupfile.tar.gz uploads/ dump.sql.gz.
Dans votre FTP, allez dans /var/discourse/shared/standalone/backups/default/, supprimez la sauvegarde corrompue ou déplacez-la dans un autre dossier.
Déplacez le nouveau fichier de sauvegarde dans /var/discourse/shared/standalone/backups/default/.
Restaurez la sauvegarde. Je préfère utiliser cette méthode, et si vous en êtes là, vous devriez pouvoir l’utiliser facilement : Restore a backup from the command line.