• [^] # Re: mysqldump

    Posté par (site web personnel) . En réponse au message Sauvegarde mariadb dans docker. Évalué à 8.

    J'ai quelques suggestions pour le script:

    TMPDIR=$(mktemp -d)
    

    Les contr'apostrophes sont pleines de pièges et je crois même qu'elle sont dépréciées depuis plusieurs dizaine d'années!

    backup_mysql()
    {
     docker-compose exec -T maria sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $TMPDIR/dump.sql
    }
    echo " Backup MySQL..."
    if backup_mysql; then
     echo " Remove backup file...."
     rm -rf "${TMPDIR:?}"
    else
     echo " Exit program: there was an error in the backup procedure."
     exit 1
    fi
    

    La fonction permet d'expliquer ce que fait cette commande compliquée (nom de la fonction) et d'avoir un flot d'exécution plus clair.

    Le :? pour protéger l'exécution de rm -rf c'est important. Le mieux je trouve est de créer un subshell et d'utiliser trap comme dans:

    with_tmpdir()
    (
     TMPDIR=$(mktemp -d)
     trap "rm -rf ${TMPDIR:?}" INT TERM EXIT
     "$@"
    )
    use_tmpdir()
    {
     touch "${TMPDIR:?}/canari"
     ls -lR "${TMPDIR}:?"
    }
    with_tmpdir use_tmpdir
    

    Ainsi on a une responsabilité claire et unifiée pour l'allocation et la déposition d'une ressource (le répertoire temporaire).