J’aime bien SQLite et c’est un moteur de base de données relationnelle que j’utilise chaque jour dans le cadre de certains projets. J’aime bien son coté portable et pour faire des choses simples ça fait parfaitement l’affaire pas besoin de la grosse artillerie. Bien évidemment, si vous avez un gros site web avec beaucoup de requêtes concurrentes, il vaudra sûrement mieux privilégier un autre SGBDR.
Aujourd’hui, je ne vais pas m’étendre sur le sujet des avantages et inconvénients. Je vais plutôt vous parler d’une petite commande qui permet d’exporter facilement sa base de données SQLite vers un fichier SQL tout ce qu’il y a de plus classique. Dans un précédent article, je vous avais déjà expliqué comment exporter une base de données MySQL ou MariaDB avec mysqldump, ici on va voir comment faire avec SQLite.
Comment et pourquoi exporter sa base de données SQLite ?
La principale raison de faire cela, c’est bien évidemment la sauvegarde ! Encore et toujours, sauvegarder, je crois que je ne répéterai jamais assez autour de moi. C’est toutefois important et on en a toujours besoin quand justement, on n’a pas fait de sauvegardes. Le grand classique malheureusement.
Une autre bonne raison d’extraire les données de sa base de données SQLite dans un fichier SQL, c’est que vous allez pouvoir très facilement réimporter ce fichier dans un autre système de base de données relationnelle. Vous pouvez très simplement importer votre fichier .sql en une commande dans MySQL, MariaDB ou PostgreSQL. C’est le côté pratique de ce format SQL, la portabilité ne pose aucun problème.
Qu’est-ce qui m’a amené à faire cet article ? Alors que ma base de données SQLite tournait depuis des années, lors d’un insert dans une transaction avec un commit, j’ai eu une erreur assez inquiétante :
SQLSTATE[HY000]: General error: 11 database disk image is malformed
Passé le moment d’inquiétude, j’ai mené ma petite enquête pour gérer au mieux la situation. Sauvegarder le fichier en lui-même de cette base de données SQLite n’a pas trop de sens dans ce cas. C’est lui qui semble corrompu quelque part. J’ai vu qu’il valait mieux essayer de faire un export dans un fichier .sql à plat. Si tout se passe bien, c’est déjà un bon signe. Je pourrais ensuite aller le réimporter dans une nouvelle base de données SQLite toute neuve ou dans un autre SGBDR.
La commande .dump de SQLite3
Pour exporter et dump cette base de données SQLite dans un fichier .sql, j’ai donc utilisé la commande suivante dans mon terminal :
sqlite3 votre_base_de_donnees.db .dump > dump_save_bdd.sql
Après avoir un peu patienté, c’est une grosse base de données de plusieurs millions de lignes, j’ai obtenu mon fichier SQL tout propre. Pour tester si le problème était bien résolut, j’ai alors recréé une base de données SQLite et j’ai importé mon fichier SQL dedans avec la commande suivante :
sqlite3 ma_nouvelle_bdd.db < dump_save_bdd.sql
Tout est alors rentré dans l’ordre à mon grand soulagement. Si le problème se reproduit, j’irai peut-être plus loin dans mes investigations, mais pour le moment le souci est résolu. Tant que j’y pense, j’ai écrit un si vous voulez optimiser votre base de données SQLite et donc gagner un peu de place. C’est toujours ça de récupéré sur votre espace de stockage.