Passer au contenu

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 :

  1. Ouvrez une connexion à votre base de données avec l’outil sqlite3 :
Fenêtre de terminal
sqlite3 chemin/vers/votre_base.db
  1. 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
  1. Exécutez la commande .dump :
.dump
  1. Quittez SQLite :
.exit

Voici un exemple complet :

Fenêtre de terminal
# Ouvrir une connexion à la base de données exemple.db
sqlite3 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 :

  1. 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.

  1. Définissez le fichier de sortie :
.output donnees.sql
  1. 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 :

INSERT INTO utilisateurs VALUES(1,'Dupont','[email protected]','2022-01-15');
INSERT INTO utilisateurs VALUES(2,'Martin','[email protected]','2022-02-20');
-- 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.sql
SELECT * 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 :

Fenêtre de terminal
# 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 :

Fenêtre de terminal
# Ouvrir/créer la base de données
sqlite3 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 quotidienne
DATE=$(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 :

Fenêtre de terminal
# Exporter l'ancienne base de données
sqlite3 ancienne_version.db ".output migration_temp.sql" ".dump" ".exit"
# Créer la nouvelle base de données avec le nouveau schéma
sqlite3 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 :

Fenêtre de terminal
sqlite3 application.db ".output schema_pour_equipe.sql" ".schema" ".exit"