Sauvegarder et restaurer des bases de données avec SQLite Dump
Lors du développement d’applications utilisant SQLite, il est essentiel de savoir comment sauvegarder et restaurer vos bases de données. La commande dump
de SQLite est un outil puissant qui vous permet de créer des sauvegardes complètes de vos bases de données ou d’exporter des tables spécifiques. Dans ce tutoriel, nous allons explorer l’utilisation de cette commande et ses différentes options.
Introduction à la commande dump de SQLite
SQLite fournit un outil en ligne de commande appelé sqlite3
qui vous permet d’interagir avec vos bases de données SQLite. Cet outil comprend de nombreuses commandes spéciales, connues sous le nom de “dot commands” (commandes précédées d’un point), qui vous permettent d’effectuer diverses opérations sur vos bases de données.
La commande .dump
est l’une de ces commandes spéciales qui vous permet d’exporter l’intégralité d’une base de données ou des tables spécifiques dans un fichier texte. Ce fichier contient des instructions SQL qui, lorsqu’elles sont exécutées, recréent la structure et les données de la base de données d’origine.
Exportation de l’ensemble d’une base de données
Pour exporter une base de données complète dans un fichier, suivez ces étapes :
- Ouvrez une connexion à votre base de données avec l’outil
sqlite3
:
sqlite3 chemin/vers/votre_base.db
- Par défaut, la commande
.dump
affiche le résultat à l’écran. Pour rediriger la sortie vers un fichier, utilisez la commande.output
:
.output chemin/vers/fichier_sauvegarde.sql
- Exécutez la commande
.dump
:
.dump
- Quittez SQLite :
.exit
Voici un exemple complet :
# Ouvrir une connexion à la base de données exemple.dbsqlite3 exemple.db
# Dans l'interface SQLite :.output sauvegarde.sql.dump.exit
La commande .dump
va générer un fichier sauvegarde.sql
contenant toutes les instructions SQL nécessaires pour recréer votre base de données, y compris la structure des tables et toutes les données.
Exportation d’une table spécifique
Si vous ne souhaitez exporter qu’une table particulière plutôt que l’ensemble de la base de données, vous pouvez spécifier le nom de cette table après la commande .dump
. Par exemple :
.output table_utilisateurs.sql.dump utilisateurs.exit
Cette commande exportera uniquement la table utilisateurs
dans le fichier table_utilisateurs.sql
.
Le fichier résultant contiendra les instructions SQL pour créer la table et y insérer toutes les données. Par exemple :
CREATE TABLE utilisateurs ( id INTEGER PRIMARY KEY, nom TEXT NOT NULL, email TEXT UNIQUE, date_inscription DATE);
INSERT INTO utilisateurs (id, nom, email, date_inscription) VALUES (1, 'Dupont', '[email protected]', '2022-01-15');INSERT INTO utilisateurs (id, nom, email, date_inscription) VALUES (2, 'Martin', '[email protected]', '2022-02-20');-- Plus d'insertions...
Exportation de la structure des tables uniquement
Si vous souhaitez exporter uniquement la structure des tables (sans les données), vous pouvez utiliser la commande .schema
à la place de .dump
. La commande .schema
génère les instructions SQL nécessaires pour créer toutes les tables, index, déclencheurs et vues de votre base de données.
.output structure.sql.schema.exit
Pour exporter la structure d’une table spécifique, vous pouvez indiquer son nom après la commande .schema
:
.output structure_utilisateurs.sql.schema utilisateurs.exit
Le fichier résultant contiendra uniquement les instructions CREATE TABLE, CREATE INDEX, etc., sans les données :
CREATE TABLE utilisateurs ( id INTEGER PRIMARY KEY, nom TEXT NOT NULL, email TEXT UNIQUE, date_inscription DATE);
CREATE INDEX idx_utilisateurs_nom ON utilisateurs(nom);-- Autres définitions de structure...
Exportation des données d’une ou plusieurs tables
Pour exporter uniquement les données d’une table (sans la structure), vous pouvez utiliser une combinaison de commandes :
- Définissez le mode d’affichage sur
insert
avec la commande.mode
:
.mode insert
Avec ce paramètre, chaque requête SELECT générera des instructions INSERT au lieu d’afficher les données sous forme de texte brut.
- Définissez le fichier de sortie :
.output donnees.sql
- Exécutez une requête SELECT pour obtenir les données souhaitées :
SELECT * FROM utilisateurs;
Le fichier donnees.sql
contiendra alors uniquement les instructions INSERT :
-- Plus d'insertions...
Pour exporter les données de plusieurs tables, il suffit d’exécuter plusieurs requêtes SELECT :
.mode insert.output donnees_multiples.sqlSELECT * FROM utilisateurs;SELECT * FROM produits;SELECT * FROM commandes;.exit
Restauration d’une base de données à partir d’un fichier de dump
Pour restaurer une base de données à partir d’un fichier de dump, vous pouvez simplement créer une nouvelle base de données et y importer le fichier de dump :
# Créer une nouvelle base de données (ou écraser l'existante)sqlite3 nouvelle_base.db < sauvegarde.sql
Ou, si vous préférez utiliser l’interface de ligne de commande :
# Ouvrir/créer la base de donnéessqlite3 nouvelle_base.db
# Dans l'interface SQLite :.read sauvegarde.sql.exit
La commande .read
exécute toutes les instructions SQL contenues dans le fichier spécifié, recréant ainsi la structure et les données de votre base de données.
Cas d’utilisation pratiques
1. Création de sauvegardes régulières
Vous pouvez automatiser la création de sauvegardes de votre base de données en utilisant un script shell :
#!/bin/bash# Script de sauvegarde quotidienneDATE=$(date +%Y-%m-%d)sqlite3 application.db ".output backup_$DATE.sql" ".dump" ".exit"
2. Migration entre versions de base de données
Lors de la mise à jour de votre application, vous pouvez utiliser .dump
pour exporter la structure et les données, puis les importer dans une nouvelle base de données avec un schéma mis à jour :
# Exporter l'ancienne base de donnéessqlite3 ancienne_version.db ".output migration_temp.sql" ".dump" ".exit"
# Créer la nouvelle base de données avec le nouveau schémasqlite3 nouvelle_version.db < nouveau_schema.sql
# Importer les données compatibles (nécessite éventuellement des modifications)# ...
# Alternative : extraction et transformation sélective des données
3. Partage de schémas entre développeurs
Vous pouvez utiliser la commande .schema
pour partager uniquement la structure de votre base de données avec d’autres développeurs, sans inclure les données sensibles ou volumineuses :
sqlite3 application.db ".output schema_pour_equipe.sql" ".schema" ".exit"