Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
autohebergement:sauvegardes [2020/03/21 10:54] eorn Hooks pour bases de données |
autohebergement:sauvegardes [2021/08/16 14:13] (Version actuelle) |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ===== Sauvegardes ===== | ===== Sauvegardes ===== | ||
| + | **Une version plus à jour, avec des sauvegardes vraiment distantes, est disponible ici :[[autohebergement:sauvegardes_chez_les_copain_e_s|Sauvegardes chez les copain·e·s]].** | ||
| + | |||
| J'utilise BorgBackup et Borgmatic pour m'occuper de mes sauvegardes. | J'utilise BorgBackup et Borgmatic pour m'occuper de mes sauvegardes. | ||
| Ligne 93: | Ligne 95: | ||
| === Correctement sauvegarder des bases de données === | === Correctement sauvegarder des bases de données === | ||
| Il faut pour cela utiliser les ''hooks'' dans le fichier de configuration. | Il faut pour cela utiliser les ''hooks'' dans le fichier de configuration. | ||
| + | J'ai écrit un petit script qui va *dumper* les bases de données, je donne un exemple plus bas. | ||
| <file> | <file> | ||
| hooks: | hooks: | ||
| + | before_backup: | ||
| + | - echo "Starting a backup." | ||
| + | - /srv/config/borg/scripts/dump_database.sh -t postgres -s etherpad -c dbetherpad | ||
| + | - /srv/config/borg/scripts/dump_database.sh -t postgres -s freshrss -c dbfreshrss | ||
| + | ... | ||
| + | </file> | ||
| + | |||
| + | Et le script ''dump_database.sh'' : | ||
| + | <file> | ||
| + | #!/bin/bash | ||
| + | |||
| + | # Default values | ||
| + | TYPE="postgres" | ||
| + | SERVICE="" | ||
| + | CONTAINER="" | ||
| + | |||
| + | while getopts "t:s:c:" opt | ||
| + | do | ||
| + | case "$opt" in | ||
| + | t) TYPE="$OPTARG";; | ||
| + | s) SERVICE="$OPTARG";; | ||
| + | c) CONTAINER="$OPTARG";; | ||
| + | esac | ||
| + | done | ||
| + | |||
| + | ### | ||
| + | # Preparation | ||
| + | FILENAME="${SERVICE}_$(date +"%Y%m%d-%H%M").sql" | ||
| + | mkdir -p /srv/apps/$SERVICE/dump | ||
| + | |||
| + | # Load env file (user, db name) | ||
| + | source /srv/apps/$SERVICE/.env | ||
| + | cd /srv/apps/$SERVICE/ | ||
| + | |||
| + | # Dump (within the container) | ||
| + | if [ $TYPE == "postgres" ] | ||
| + | then | ||
| + | docker-compose \ | ||
| + | -f /srv/apps/$SERVICE/docker-compose.yml\ | ||
| + | exec $CONTAINER\ | ||
| + | pg_dump -U $POSTGRES_USER -d $POSTGRES_DB -f /$FILENAME | ||
| + | elif [ $TYPE == "mysql" ] | ||
| + | then | ||
| + | docker-compose \ | ||
| + | -f /srv/apps/$SERVICE/docker-compose.yml\ | ||
| + | exec $CONTAINER\ | ||
| + | mysqldump -u $MYSQL_USER --databases $MYSQL_DATABASE -p${MYSQL_PASSWORD} -r /$FILENAME | ||
| + | fi | ||
| + | |||
| + | |||
| + | # Copy the dump file to host | ||
| + | docker cp ${SERVICE}_${CONTAINER}_1:/$FILENAME /srv/apps/$SERVICE/dump | ||
| + | |||
| + | # Remove the dump file in the container | ||
| + | docker-compose \ | ||
| + | -f /srv/apps/$SERVICE/docker-compose.yml\ | ||
| + | exec $CONTAINER rm /$FILENAME | ||
| </file> | </file> | ||