A l'intérieur de votre conteneur MySQL, là où se trouve votre moteur de base de donnée, utilisez la commande mysqldump pour sauvegarder une base :
mysqldump votre_base >  /chemin/backup_votre_base.sql
Avec cette commande, on demande à MySQL de dumper la base votre_base dans le fichier /chemin/backup_votre_base.sql.
Il faut quand même nuancer le propos :
- 
Il faut rapatrier la sauvegarde .sqldu conteneur vers l'hôte, donc utiliser un répertoire partagé entre les deux (par exemple, un bind mount)
- 
La base et le moteur sont authentifiés - Il faudra passer l'authentification à mysqldump
- On évitera absolument d'utiliser les options -uet-ppour passer le nom d'utilisateur et le mot de passe en ligne de commande- Ces informations sont visibles en affichant les processus (commande ps), mais aussi fatalement dans votre script de backup
 
- Ces informations sont visibles en affichant les processus (commande 
 
- Il faudra passer l'authentification à 
- 
Il faut exécuter cette commande a priori à partir de l'hôte : - On demande à docker d'exécuter la commande mysqldumpà l'intérieur du conteneur- Commande docker exec
 
- Commande 
 
- On demande à docker d'exécuter la commande 
1)
Il faut avoir créé votre conteneur MySQL avec un volume ou un bind mount.
Identifiez les bind mounts de votre conteneur mysql_mariadb_prod avec la commande :
docker inspect mysql_mariadb_prod --format='{{.Mounts}}'
[{bind  /data/mariadb /bitnami/mariadb  rw true rprivate}]
Ici, le répertoire /data/mariadb sur l'hôte correspond au répertoire /bitnami/mariadb dans le conteneur.
On mettra la sauvegarde dans /bitnami/mariadb pour la récupérer par la suite au niveau de l'hôte, dans /data/mariadb.
2)
Il y a plusieurs possibilités pour passer l'authentification à mysqldump sans l'écrire dans la ligne de commande.
Une de ces possibilités est d'utiliser un fichier de configuration, dont on précisera le chemin à mysqldump avec l'option --defaults-file=.
Format du fichier de configuration .my.cnf :
[mysqldump]
user=mysqluser
password=secret
NB : utiliser autant que faire se peut l'authentification la plus restreinte possible. Ici, on utilise l'utilisateur/mot de passe de la base à sauvegarder, plutôt que les identifiants de l'administrateur du moteur MySQL.
On pourrait par exemple :
a) Stocker ce fichier dans un endroit sécurisé sur l'hôte
b) Au moment de le sauvegarde, copier ce fichier vers le répertoire partagé avec le conteneur (ici, /data/mariadb), avec les bonnes permissions
c) Demander à mysqldump d'utiliser ce fichier dans le répertoire correspondant dans le conteneur (ici, /bitnami/mariadb) et effectuer la sauvegarde
d) Supprimer le fichier
3)
Pour exécuter la commande mysqldump à partir de l'hôte, on l'encapsule dans un bash -c.
Par exemple :
docker exec mysql_mariadb_prod bash -c 'la commande'
Au final,
voici la commande que l'on va exécuter au niveau de l'hôte :
cp /securepath/.my.cnf /data/mariadb/
docker exec mysql_mariadb_prod bash -c 'mysqldump --defaults-file=/bitnami/mariadb/.my.cnf votre_base > /bitnami/mariadb/backup_votre_base.sql'
rm /data/mariadb/.my.cnf
mv /data/mariadb/backup_votre_base.sql /backups/
On fera bien attention aux permissions qu'on met sur le fichier de config .cnf :
- chmod 400
- chown UID utilisé par mysqldump / UID correspondant sur l'hôte
 
                    