Docker : Dump et restauration
Lancement MariaDB avec Docker
Pour lancer une base de données MariaDB avec Docker, utilisez la commande suivante :
docker run -d \
--name mariadb-server \
-e MYSQL_ROOT_PASSWORD=rootpass \
-e MYSQL_DATABASE=starwars \
-e MYSQL_USER=jedi \
-e MYSQL_PASSWORD=forcepass \
-v mariadb-data:/var/lib/mysql \
-p 3306:3306 \
mariadb:11.4
Explication des paramètres :
-d: Exécute en arrière-plan--name: Nom du conteneur-e MYSQL_ROOT_PASSWORD: Mot de passe root-e MYSQL_DATABASE: Crée automatiquement une base de données-e MYSQL_USER / MYSQL_PASSWORD: Crée un utilisateur avec accès à la base-v mariadb-data:/var/lib/mysql: Volume pour persister les données-p 3306:3306: Expose le port 3306mariadb:11.4: Version fixe de MariaDB
Exemple : Création des tables Star Wars
Connexion au conteneur pour créer les tables :
docker exec -it mariadb-server mysql -ujedi -pforcepass starwars
Création des tables :
CREATE TABLE planetes (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100),
climat VARCHAR(50),
population BIGINT
);
CREATE TABLE personnages (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100),
espece VARCHAR(50),
planete_id INT,
cote VARCHAR(20),
FOREIGN KEY (planete_id) REFERENCES planetes(id)
);
INSERT INTO planetes (nom, climat, population) VALUES
('Tatooine', 'aride', 200000),
('Naboo', 'tempéré', 4500000);
INSERT INTO personnages (nom, espece, planete_id, cote) VALUES
('Luke Skywalker', 'humain', 1, 'lumineux'),
('Leia Organa', 'humain', 2, 'lumineux');
Dump et restauration MariaDB
Script de dump (sauvegarde)
Créez un fichier dump_mariadb.sh :
!#/bin/bash
docker exec mariadb-server mysqldump -ujedi -pforcepass starwars > backup_starwars_$(date +%Y%m%d_%H%M%S).sql
echo "Backup MariaDB créé : backup_starwars_$(date +%Y%m%d_%H%M%S).sql"
Rendre le script exécutable :
chmod +x dump_mariadb.sh
Exécution :
.\/dump_mariadb.sh
Cela crée un fichier de sauvegarde avec horodatage, par exemple : backup_starwars_20260101_143022.sql
Script de restauration
Créez un fichier restore_mariadb.sh :
!#/bin/bash
docker exec -i mariadb-server mysql -ujedi -pforcepass starwars < backup_starwars_20260101_143022.sql
echo "Restauration MariaDB terminée"
Rendre le script exécutable et exécuter :
chmod +x restore_mariadb.sh
.\/restore_mariadb.sh
Le dump contient toute la structure (tables) et les données de la base starwars. Il peut être utilisé pour restaurer la base sur un autre serveur.
Automatisation avec cron
Pour automatiser la sauvegarde quotidienne, ajoutez une tâche cron :
crontab -e
Ajoutez la ligne suivante pour une sauvegarde tous les jours à 2h du matin :
0 2 * * * /home/user/dump_mariadb.sh
Lancement PostgreSQL avec Docker
Pour lancer une base de données PostgreSQL avec Docker, utilisez la commande suivante :
docker run -d \
--name postgres-server \
-e POSTGRES_PASSWORD=rootpass \
-e POSTGRES_USER=jedi \
-e POSTGRES_DB=starwars \
-v postgres-data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:14
Explication des paramètres :
-d: Exécute en arrière-plan--name: Nom du conteneur-e POSTGRES_PASSWORD: Mot de passe de l'utilisateur-e POSTGRES_USER: Nom d'utilisateur principal-e POSTGRES_DB: Crée automatiquement une base de données-v postgres-data:/var/lib/postgresql/data: Volume pour persister les données-p 5432:5432: Expose le port 5432postgres:14: Version fixe de PostgreSQL
Exemple : Création des tables Star Wars
Connexion au conteneur pour créer les tables :
docker exec -it postgres-server psql -U jedi -d starwars
Création des tables :
CREATE TABLE planetes (
id SERIAL PRIMARY KEY,
nom VARCHAR(100),
climat VARCHAR(50),
population BIGINT
);
CREATE TABLE personnages (
id SERIAL PRIMARY KEY,
nom VARCHAR(100),
espece VARCHAR(50),
planete_id INT,
cote VARCHAR(20),
FOREIGN KEY (planete_id) REFERENCES planetes(id)
);
INSERT INTO planetes (nom, climat, population) VALUES
('Tatooine', 'aride', 200000),
('Naboo', 'tempéré', 4500000);
INSERT INTO personnages (nom, espece, planete_id, cote) VALUES
('Luke Skywalker', 'humain', 1, 'lumineux'),
('Leia Organa', 'humain', 2, 'lumineux');
PostgreSQL utilise SERIAL pour les auto-incréments au lieu de AUTO_INCREMENT de MySQL/MariaDB.
Dump et restauration PostgreSQL
Script de dump (sauvegarde)
Créez un fichier dump_postgres.sh :
!#/bin/bash
docker exec postgres-server pg_dump -U jedi starwars > backup_starwars_$(date +%Y%m%d_%H%M%S).sql
echo "Backup PostgreSQL créé : backup_starwars_$(date +%Y%m%d_%H%M%S).sql"
Rendre le script exécutable :
chmod +x dump_postgres.sh
Exécution :
.\/dump_postgres.sh
Script de restauration
Créez un fichier restore_postgres.sh :
!#/bin/bash
docker exec -i postgres-server psql -U jedi starwars < backup_starwars_20260101_143022.sql
echo "Restauration PostgreSQL terminée"
Rendre le script exécutable et exécuter :
chmod +x restore_postgres.sh
.\/restore_postgres.sh
Automatisation avec cron
Pour automatiser la sauvegarde quotidienne :
crontab -e
Ajoutez la ligne suivante pour une sauvegarde tous les jours à 2h du matin :
0 2 * * * /home/user/dump_postgres.sh
Comparaison des commandes
| Opération | MariaDB | PostgreSQL |
|---|---|---|
| Lancement Docker | mariadb:11.4 |
postgres:14 |
| Port par défaut | 3306 | 5432 |
| Connexion CLI | mysql -u -p |
psql -U -d |
| Dump | mysqldump |
pg_dump |
| Restauration | mysql < fichier.sql |
psql < fichier.sql |
| Volume de données | /var/lib/mysql |
/var/lib/postgresql/data |
Bonnes pratiques de sauvegarde
- Fréquence : Automatisez les sauvegardes quotidiennes avec cron
- Rétention : Conservez plusieurs sauvegardes (7 derniers jours, 4 dernières semaines, etc.)
- Stockage externe : Copiez les dumps vers un stockage distant (NAS, cloud, etc.)
- Test de restauration : Testez régulièrement la restauration pour vérifier l'intégrité des backups
- Compression : Compressez les dumps pour économiser de l'espace :
gzip backup.sql
Un backup non testé n'est pas un vrai backup ! Testez régulièrement la restauration de vos sauvegardes.
Nettoyage des anciennes sauvegardes
Pour éviter de saturer le disque, supprimez automatiquement les sauvegardes de plus de 7 jours :
find ./ -name "backup_starwars_*.sql" -mtime +7 -delete
Ajoutez cette ligne à vos scripts de dump pour un nettoyage automatique.