Reconstruire la base de données SQLite3 d'une application
A la suite d'un kernel panic, le serveur Wired du Mac en question, s'est mis en rideau. Au redémarrage, le serveur se lance bien, mais impossible de rester connecter plus de quelques secondes.
En regardant les logs, je vois cela, et les lignes défilent très très vite, avec plusieurs erreurs par seconde.
La base de données semble complètement plantée.
Avant de ré-installer tout le serveur, j'ai tenté une réparation. Cela évite ainsi de reconfigurer tout le serveur, en particulier de refaire l'ensemble des comptes, avec leurs mots de passe.
Une opération qui s'est déroulée avec succès.
Voici la méthode utilisée, car cela peut s'appliquer à d'autres applications utilisant une base de données SQLite3. SQLite3 est une application disponible directement avec macOS, c'est d'ailleurs aussi pour cela que les application s'en servent.
Dans un terminal, j'ouvre la base de données avec l'application
sqlite3 /Users/sky/Library/Wired/database.sqlite
Je jette vite fait un petit coup d'oeil aux tables, voir si elles sont toujours là.
.tables
le résultat est encourageant
banlist groups posts topic
boards index servers users
events index_metadata threads versions
Les tables sont toujours présentes.
J'exporte toutes les données de la base dans un fichier externe
.mode insert
.output wired.sql
.dump
Le fichier est écrit. Je quitte l'application.
.exit
Maintenant, je peux réouvrir SQLite3 dans une nouvelle base, en reprenant le nom de celle utilisée par Wired (en faisant bien attention de ne pas être dans le dossier qui contient la base).
sqlite3 database.sqlite
Puis je lis le contenu de mon fichier.
.read wired.sql
et je quitte.
.exit
Je n'ai plus qu'à mettre de côté la précédente base de données, et mettre en place la nouvelle.
Je n'ai plus qu'à relancer le serveur Wired, et me reconnnecter pour vérifier que cela fonctionne bien.