r215@um: micah | 2005-12-27 09:40:23 -0500
[matthijs/upstream/backupninja.git] / handlers / mysql
index 4ac631b574bf9d2836b52d45c17246662d0571c2..0f5cd5c470e9312b994b782a1c1e67f29b1c493b 100644 (file)
@@ -17,22 +17,6 @@ getconf dbusername
 getconf dbpassword
 getconf configfile /etc/mysql/debian.cnf
 
-if [ "$user" == "" ]; then
-       userset=false;
-       user=root;
-else
-       userset=true;
-       userhome=`getent passwd "$user" | awk -F: '{print $6}'`
-       [ -f $userhome/.my.cnf ] || fatal "Can't find config file in $userhome/.my.cnf"
-fi
-
-## Prepare ignore part of the command
-## This only works for mysqldump at the moment
-
-ignore=''
-for i in $ignores; do
-       ignore="$ignore --ignore-table=$i"
-done
 
 # If vservers are configured, decide if the handler should
 # use them or if it should just operate on the host
@@ -51,17 +35,54 @@ fi
 # If needed, make sure that the specified vserver exists and is running.
 if [ $usevserver ]
 then
-       info "examining vserver '$vsname'"
+       info "Examining vserver '$vsname'"
        # does it exist ?
        vroot="$VROOTDIR/$vsname"
        [ -d $vroot ] || fatal "vserver '$vsname' does not exist at '$vroot'"
        # is it running ?
-       running=`$VSERVERINFO $vsname RUNNING`
-       [ $running = 1 ] || fatal "vserver $vsname is not running."
+       $VSERVERINFO -q $vsname RUNNING
+       if [ $? -ne 0 ]
+       then
+               fatal "vserver $vsname is not running."
+       fi
+fi
+
+if [ "$user" == "" ]; then
+       userset=false;
+       user=root;
+else
+       userset=true;
+       if [ $usevserver ]
+       then
+           userhome=`$VSERVER $vsname exec getent passwd "$user" | awk -F: '{print $6}'`
+           if [ $? -eq 2 ]
+           then
+               fatal "User $user not found in /etc/passwd"
+           fi
+           userhome="$vroot$userhome"
+           info "User home set to: $userhome"
+           [ -f $userhome/.my.cnf ] || fatal "Can't find config file in $userhome/.my.cnf"
+       else
+           userhome=`getent passwd "$user" | awk -F: '{print $6}'`
+           if [ $? -eq 2 ]
+           then
+               fatal "User $user not found in /etc/passwd"
+           fi
+                   info "User home set to: $userhome"
+           [ -f $userhome/.my.cnf ] || fatal "Can't find config file in $userhome/.my.cnf"
+       fi
 fi
+
+## Prepare ignore part of the command
+## This only works for mysqldump at the moment
+
+ignore=''
+for i in $ignores; do
+       ignore="$ignore --ignore-table=$i"
+done
        
-# create backup dirs, the vroot variable will be empty if no vsname was specified
-# and will proceed to operate on the host
+# create backup dirs, $vroot will be empty if no vsname was specified
+# and we will instead proceed to operate on the host
 [ -d $vroot$backupdir ] || mkdir -p $vroot$backupdir
 [ -d $vroot$backupdir ] || fatal "Backup directory '$vroot$backupdir'"
 hotdir="$backupdir/hotcopy"
@@ -94,19 +115,26 @@ fi
 # specify the password on the command line.
 
 defaultsfile=""
-if [ "$dbusername" != "" -a "$dbpassword" != "" ]; then
-       home=`grep '^root:' /etc/passwd | awk -F: '{print $6}'`
-       [ -d $home ] || fatal "Can't find root's home directory ($home)."
-       mycnf="$home/.my.cnf"
-       if [ -f $mycnf ]; then
-               # rename temporarily
-               tmpcnf="$home/my.cnf.disable"
-               debug "mv $mycnf $tmpcnf"
-               mv $mycnf $tmpcnf
-       fi
-       oldmask=`umask`
-       umask 077
-       cat > $mycnf <<EOF
+if [ "$dbusername" != "" -a "$dbpassword" != "" ]
+then
+    if [ $usevserver ]
+    then
+       home=`$VSERVER $vsname exec getent passwd "root" | awk -F: '{print $6}'`
+    else
+       home=`getent passwd "root" | awk -F: '{print $6}'`
+    fi
+    [ -d $home ] || fatal "Can't find root's home directory ($home)."
+    mycnf="$home/.my.cnf"
+    if [ -f $mycnf ]
+    then
+       # rename temporarily
+       tmpcnf="$home/my.cnf.disable"
+       debug "mv $mycnf $tmpcnf"
+       mv $mycnf $tmpcnf
+    fi
+    oldmask=`umask`
+    umask 077
+    cat > $mycnf <<EOF
 # auto generated backupninja mysql conf
 [mysql]
 user=$dbusername
@@ -182,8 +210,16 @@ if [ "$sqldump" == "yes" ]; then
                if [ $usevserver ]
                then
                        databases=`echo 'show databases' | $VSERVER $vsname exec su $user -c "$MYSQL $defaultsfile" | grep -v Database`
+                       if [ $? -ne 0 ]
+                       then
+                           fatal "Something unexpected happened, the defaults file may have gone missing or is corrupt"
+                       fi
                else
                        databases=`echo 'show databases' | su $user -c "$MYSQL $defaultsfile" | grep -v Database`
+                       if [ $? -ne 0 ]
+                       then
+                           fatal "Something unexpected happened, the defaults file may have gone missing or is corrupt"
+                       fi
                fi
        fi