Correction : local/backup/*-snapshot : évite set -e : inactif dans les fonctions.
authorJulien Moutinho <julm+heureux-cyclage@autogeree.net>
Wed, 11 Sep 2013 10:26:19 +0000 (12:26 +0200)
committerroot <root@ateliers.heureux-cyclage.org>
Wed, 11 Sep 2013 10:28:01 +0000 (12:28 +0200)
local/backup/mysql-snapshot
local/backup/postgresql-snapshot

index d77d2bf..56e5b14 100755 (executable)
@@ -15,20 +15,31 @@ 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" &&
+trap_exit () {
+       errno=$?
+       test $errno = 0 ||
+       cat >&2 <<-EOF
+               ERROR: $0 "$database" "$@"
+               EOF
+       #return $errno
+ }
+trap trap_exit EXIT
+
+while IFS='' read -r database
+ do
+       test "${database:+set}"
+       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 &&
+       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
+        done <<-EOF
+               $(mysql -u backup --batch --skip-column-names <<-EOF
                                SELECT table_name,engine
                                        FROM information_schema.tables
                                        WHERE table_schema = '$database';
@@ -37,38 +48,27 @@ snapshot () {
                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
-        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 +76,3 @@ while IFS='   ' read -r database
                EOF
         )
        EOF
-exit $exit
index da34ee0..a9b3348 100755 (executable)
@@ -15,32 +15,31 @@ test ! $# = 0 || set -- :
 install -d -m 770 -o backup -g backup \
  ~backup/snapshot/postgresql
 
-snapshot () {
-       local database="$1" && shift &&
-       test ! -e ~backup/snapshot/postgresql/"$database" &&
+trap_exit () {
+       errno=$?
+       test $errno = 0 ||
+       cat >&2 <<-EOF
+               ERROR: $0 "$database" "$@"
+               EOF
+       #return $errno
+ }
+trap trap_exit EXIT
+
+while IFS=' \r' read -r database
+ do
+       test "${database:+set}"
+       test ! -e ~backup/snapshot/postgresql/"$database"
                # NOTE: soit une sauvegarde est déjà en cours,
                #       soit une précédente a échoué.
        install -d -m 770 -o backup -g backup \
-        ~backup/snapshot/postgresql/"$database" &&
-       psql --quiet "$database" -c "VACUUM (ANALYSE);" &&
+        ~backup/snapshot/postgresql/"$database"
+       psql --quiet "$database" -c "VACUUM (ANALYSE);"
        pg_dump --blobs --compress 0 --format custom ${TRACE:+--verbose} \
         --file ~backup/snapshot/postgresql/"$database"/dump.sql \
-        "$database" &&
-       eval "$@" &&
+        "$database"
+       eval "$@"
        rm -rf \
-        ~backup/snapshot/postgresql/"$database" &&
-       :
- }
-
-exit=0
-while IFS=' \r' read -r database
- do if ! snapshot "$database" "$@"
-        then
-               exit=1
-               cat >&2 <<-EOF
-                       ERROR: snapshot "$database" "$@"
-                       EOF
-        fi
+        ~backup/snapshot/postgresql/"$database"
  done <<-EOF
        $(psql --quiet --tuples-only postgres <<-EOF || exit 1
                \set ON_ERROR_STOP on
@@ -51,4 +50,3 @@ while IFS=' \r' read -r database
                EOF
         )
        EOF
-exit $exit