mysql: No longer prepend vroot to the backupdir.
[matthijs/upstream/backupninja.git] / handlers / mysql.in
index d3e15ab381cd3b39e09eafa5a03b77e03c4326d2..db4159d412a87bc111af4c0dd97fd0184e311df1 100644 (file)
@@ -31,6 +31,8 @@ if [ -n "$vsname" ]; then
    if [ -z "$vsnames" ]; then
       warning "Using deprecated 'vsname' configuration variable"
       vsnames="$vsname"
+      info "Prepending '%v' to backupdir to emulate legacy behaviour"
+      backupdir="%v/$backupdir"
    else
       warning "Ignoring (deprecated) vsname configuration variable, since vsnames is given"
    fi
@@ -76,16 +78,15 @@ function make_backup() {
 
    interpolated=`interpolate "$backupdir" "$vsname"`
 
-   # create backup dirs, $vroot will be empty if no vsname was specified
-   # and we will instead proceed to operate on the host
-   [ -d $vroot$interpolated ] || mkdir -p $vroot$interpolated
-   [ -d $vroot$interpolated ] || fatal "Backup directory '$vroot$backupdir'"
+   # create backup dirs
+   [ -d $interpolated ] || mkdir -p $interpolated
+   [ -d $interpolated ] || fatal "Failed to create backup directory '$interpolated'"
 
    hotdir="$interpolated/hotcopy"
    dumpdir="$interpolated/sqldump"
 
-   [ "$sqldump" == "no" -o -d $vroot$dumpdir ] || mkdir -p $vroot$dumpdir
-   [ "$hotcopy" == "no" -o -d $vroot$hotdir ] || mkdir -p $vroot$hotdir
+   [ "$sqldump" == "no" -o -d $dumpdir ] || mkdir -p $dumpdir
+   [ "$hotcopy" == "no" -o -d $hotdir ] || mkdir -p $hotdir
 
    #######################################################################
    ## AUTHENTICATION
@@ -173,46 +174,51 @@ EOF
 
    if [ "$hotcopy" == "yes" ]
    then
-      info "Initializing hotcopy method"
-      if [ "$databases" == "all" ]
-      then
-         info "dbhost: $dbhost"
-         execstr="$vexec $MYSQLHOTCOPY -h $dbhost --quiet --allowold --regexp /.\*/./.\*/ $hotdir"
-
-         debug "su $user -c \"$execstr\""
-         if [ ! $test ]
+      if starts_with "$hotdir" "$vroot"; then
+         info "Initializing hotcopy method"
+         vhotdir=`strip_prefix "$hotdir" "$vroot"`
+         if [ "$databases" == "all" ]
          then
-            output=`su $user -c "$execstr" 2>&1`
-            code=$?
-            if [ "$code" == "0" ]
-            then
-                    debug $output
-                    info "Successfully finished hotcopy of all mysql databases"
-            else
-                    warning $output
-                    warning "Failed to hotcopy all mysql databases"
-            fi
-         fi
-      else
-         for db in $databases
-         do
-            execstr="$vexec $MYSQLHOTCOPY -h $dbhost --allowold $db $hotdir"
+            info "dbhost: $dbhost"
+            execstr="$vexec $MYSQLHOTCOPY -h $dbhost --quiet --allowold --regexp /.\*/./.\*/ $vhotdir"
 
-            debug 'su $user -c \"$execstr\"'
+            debug "su $user -c \"$execstr\""
             if [ ! $test ]
             then
                output=`su $user -c "$execstr" 2>&1`
                code=$?
                if [ "$code" == "0" ]
                then
-                  debug $output
-                  info "Successfully finished hotcopy of mysql database $db"
+                    debug $output
+                    info "Successfully finished hotcopy of all mysql databases"
                else
-                  warning $output
-                  warning "Failed to hotcopy mysql database $db"
+                    warning $output
+                    warning "Failed to hotcopy all mysql databases"
                fi
             fi
-         done
+         else
+            for db in $databases
+            do
+               execstr="$vexec $MYSQLHOTCOPY -h $dbhost --allowold $db $vhotdir"
+
+               debug 'su $user -c \"$execstr\"'
+               if [ ! $test ]
+               then
+                  output=`su $user -c "$execstr" 2>&1`
+                  code=$?
+                  if [ "$code" == "0" ]
+                  then
+                     debug $output
+                     info "Successfully finished hotcopy of mysql database $db"
+                  else
+                     warning $output
+                     warning "Failed to hotcopy mysql database $db"
+                  fi
+               fi
+            done
+         fi
+      else
+         error "hotcopy method can only be used when the backupdir ($hotdir) is within the vserver ($vroot)"
       fi
    fi
 
@@ -258,9 +264,9 @@ EOF
                       fatal "Either you have an authentication problem, or mysqld doesn't appear to be running!"
                    fi
                    if [ "$compress" == "yes" ]; then
-                      execstr="$vexec $DUMP | $GZIP > $vroot$dumpdir/${db}.sql.gz"
+                      execstr="$vexec $DUMP | $GZIP > $dumpdir/${db}.sql.gz"
                    else
-                      execstr="$vexec $DUMP -r $vroot$dumpdir/${db}.sql"
+                      execstr="$vexec $DUMP -r $dumpdir/${db}.sql"
                    fi
 
                    debug "su $user -c \"$execstr\""