Correction : résilience des sauvegardes MySQL et PostgreSQL.
authorJulien Moutinho <julm+heureux-cyclage@autogeree.net>
Tue, 24 Sep 2013 11:44:16 +0000 (13:44 +0200)
committerroot <root@ateliers.heureux-cyclage.org>
Tue, 24 Sep 2013 11:44:16 +0000 (13:44 +0200)
local/backup/mysql-snapshot
local/backup/postgresql-snapshot

index 56e5b14..24a07f3 100755 (executable)
@@ -15,22 +15,17 @@ test ! $# = 0 || set -- :
 install -d -m 770 -o backup -g backup \
  ~backup/snapshot/mysql
 
-trap_exit () {
-       errno=$?
-       test $errno = 0 ||
-       cat >&2 <<-EOF
-               ERROR: $0 "$database" "$@"
-               EOF
-       #return $errno
- }
-trap trap_exit EXIT
-
+errno=0
 while IFS='' read -r database
- do
+ 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é.
+       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
@@ -40,10 +35,10 @@ while IFS='' read -r database
                 esac
         done <<-EOF
                $(mysql -u backup --batch --skip-column-names <<-EOF
-                               SELECT table_name,engine
-                                       FROM information_schema.tables
-                                       WHERE table_schema = '$database';
-                               EOF
+                       SELECT table_name,engine
+                               FROM information_schema.tables
+                               WHERE table_schema = '$database';
+                       EOF
                 )
                EOF
        case $can_hotcopy in
@@ -67,6 +62,15 @@ while IFS='' read -r database
        eval "$@"
        rm -rf \
         ~backup/snapshot/mysql/"$database"
+ } || {
+       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
                SELECT schema_name
@@ -76,3 +80,4 @@ while IFS='' read -r database
                EOF
         )
        EOF
+exit $errno
index a9b3348..bbacc62 100755 (executable)
@@ -15,22 +15,17 @@ test ! $# = 0 || set -- :
 install -d -m 770 -o backup -g backup \
  ~backup/snapshot/postgresql
 
-trap_exit () {
-       errno=$?
-       test $errno = 0 ||
-       cat >&2 <<-EOF
-               ERROR: $0 "$database" "$@"
-               EOF
-       #return $errno
- }
-trap trap_exit EXIT
-
+errno=0
 while IFS=' \r' read -r database
- do
+ 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é.
+       if test -e ~backup/snapshot/postgresql/$database
+        then
+               cat >&2 <<-EOF
+                       ERROR: soit une sauvegarde est déjà en cours, soit une précédente a échoué.
+                       EOF
+               false
+        fi
        install -d -m 770 -o backup -g backup \
         ~backup/snapshot/postgresql/"$database"
        psql --quiet "$database" -c "VACUUM (ANALYSE);"
@@ -40,6 +35,15 @@ while IFS=' \r' read -r database
        eval "$@"
        rm -rf \
         ~backup/snapshot/postgresql/"$database"
+ } || {
+       errno=$?
+       cat >&2 <<-EOF
+               ERROR: $0 "$database" "$@"
+               EOF
+       if test "${database:+set}"
+        then rm -rf ~backup/snapshot/postgresql/"$database"
+        fi
+ }
  done <<-EOF
        $(psql --quiet --tuples-only postgres <<-EOF || exit 1
                \set ON_ERROR_STOP on
@@ -50,3 +54,4 @@ while IFS=' \r' read -r database
                EOF
         )
        EOF
+exit $errno