mysql: No longer prepend vroot to the backupdir. vsfixes
authorMatthijs Kooijman <matthijs@stdin.nl>
Thu, 22 Jan 2009 20:54:16 +0000 (21:54 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Thu, 22 Jan 2009 21:01:58 +0000 (22:01 +0100)
Prepending the vroot can still be done manually by starting the
backupdir config variable with %v. For backwards compatibility,
prepending %v is done automatically when vsname is used (instead of
vsnames). This requires the vsname -> vsnames change and this change to
be released at the same time.

examples/example.mysql
handlers/mysql.in

index a16a9d068b4313000863d12405a764a5b807742a..00298451b003961e01809ef351b25652c7fe044a 100644 (file)
@@ -70,6 +70,10 @@ compress    = yes
 #
 # hotcopy = < yes | no > (default = no)
 # make a backup of the actual database binary files using mysqlhotcopy.
+# When using hotcopy, backupdir must be a dir inside each vserver! You can use
+# the interpolation feature to do this for multiple vservers by starting
+# backupdir with %v (not /%v), which will be replaced by the current
+# vserver root.
 #
 # sqldump = < yes | no > (default = no)
 # make a backup using mysqldump. this creates text files with sql commands
@@ -87,5 +91,11 @@ compress    = yes
 # in /etc/backupninja.conf), if you do not specify vsnames the 
 # host will be operated on.
 # 
+# Note that backupninja 0.9.6 and before used "vsname" to run in a single
+# vserver. It also automatically prepended the vserver root directory to
+# backupdir. Newer versions still do this if you're using the deprecated (but
+# still supported) "vsname" variable. To achieve the same effect while using
+# the vsnames variable, prepend backupdir with %v
+# 
 # NB: databases = all doesn't seem to work with hotcopy = yes 
 # when vsname is specified, I would like to know how to fix this.
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\""