X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=local%2Fbackup%2Fmysql-snapshot;h=24a07f3a6e6f51f6fb4516b5fc2eb0bad3854a89;hb=e57c2cb3aaf57656db0f617ed78848dbbcf93d6a;hp=d77d2bf8bcc25415ffc0bba0ac1395a4c3aa270d;hpb=f5e12fec2c7ef8d743e2d3e32c3bbe37b40c7a73;p=lhc%2Fateliers.git diff --git a/local/backup/mysql-snapshot b/local/backup/mysql-snapshot index d77d2bf..24a07f3 100755 --- a/local/backup/mysql-snapshot +++ b/local/backup/mysql-snapshot @@ -15,60 +15,64 @@ test ! $# = 0 || set -- : install -d -m 770 -o backup -g backup \ ~backup/snapshot/mysql -snapshot () { - local database="$1" && shift && - test ! -e ~backup/snapshot/mysql/"$database" && - # NOTE: soit une sauvegarde est déjà en cours, - # soit une précédente a échoué. - can_hotcopy=yes && +errno=0 +while IFS='' read -r database + do { + test "${database:+set}" + if test -e ~backup/snapshot/mysql/$database + then + cat >&2 <<-EOF + ERROR: soit une sauvegarde est déjà en cours, soit une précédente a échoué. + EOF + false + fi + can_hotcopy=yes while IFS=' ' read -r table engine do case $engine in (MyISAM|ARCHIVE) :;; (*) can_hotcopy=no;; esac - done <<-EOF && - $(mysql -u backup --batch --skip-column-names <<-EOF || exit 1 - SELECT table_name,engine - FROM information_schema.tables - WHERE table_schema = '$database'; - EOF + done <<-EOF + $(mysql -u backup --batch --skip-column-names <<-EOF + SELECT table_name,engine + FROM information_schema.tables + WHERE table_schema = '$database'; + EOF ) EOF case $can_hotcopy in (yes) - cd / && + cd / sudo -u root find ~mysql-data -mindepth 1 -maxdepth 1 -type d -exec \ - install -d -m 750 -o mysql -g backup {} + && - cd - >/dev/null 2>&1 && - test "${TRACE:+set}" || quiet=--quiet && + install -d -m 750 -o mysql -g backup {} + + cd - >/dev/null 2>&1 + test "${TRACE:+set}" || quiet=--quiet mysqlhotcopy --method=cp -u backup ${quiet:-} \ "$database" ~backup/snapshot/mysql ;; (no) install -d -m 770 -o backup -g backup \ - ~backup/snapshot/mysql/"$database" && + ~backup/snapshot/mysql/"$database" mysqldump --opt --events -u backup ${TRACE:+--verbose} \ - --result-file ~backup/snapshot/mysql/"$database"/dump.sql \ + --result-file ~backup/snapshot/mysql/$database/dump.sql \ "$database" ;; - esac && - eval "$@" && + esac + eval "$@" rm -rf \ ~backup/snapshot/mysql/"$database" - } - -exit=0 -while IFS=' ' read -r database - do if ! snapshot "$database" "$@" - then - exit=1 - cat >&2 <<-EOF - ERROR: snapshot "$database" "$@" - EOF + } || { + errno=$? + cat >&2 <<-EOF + ERROR: $0 "$database" "$@" + EOF + if test "${database:+set}" + then rm -rf ~backup/snapshot/mysql/"$database" fi + } done <<-EOF - $(mysql -u backup --batch --skip-column-names <<-EOF || exit 1 + $(mysql -u backup --batch --skip-column-names <<-EOF SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema', 'performance_schema') @@ -76,4 +80,4 @@ while IFS=' ' read -r database EOF ) EOF -exit $exit +exit $errno