Added the "Emacs comment line" on top of every shell file.
[matthijs/upstream/backupninja.git] / handlers / mysql
index 6fd50562998ed648ea91cfbc2e105e6befecc0fb..7ca9ab64ecbc2dc6a17839ecad79e5cfa21a5279 100644 (file)
@@ -1,3 +1,4 @@
+# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
 #
 # mysql handler script for backupninja
 #
@@ -35,7 +36,7 @@ fi
 # If needed, make sure that the specified vserver exists and is running.
 if [ $usevserver ]
 then
-       info "Examining vserver '$vsname'"
+       debug "Examining vserver '$vsname'"
        # does it exist ?
        vroot="$VROOTDIR/$vsname"
        [ -d $vroot ] || fatal "vserver '$vsname' does not exist at '$vroot'"
@@ -47,32 +48,6 @@ then
        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
 
@@ -115,19 +90,21 @@ fi
 # specify the password on the command line.
 
 defaultsfile=""
+
 if [ "$dbusername" != "" -a "$dbpassword" != "" ]
 then
     if [ $usevserver ]
     then
-       home=`$VSERVER $vsname exec getent passwd "root" | awk -F: '{print $6}'`
-       home="$vroot$home"
-       info "Home set to: $home"
+       vhome=`$VSERVER $vsname exec getent passwd "root" | awk -F: '{print $6}'`
+       home="$vroot$vhome"
     else
        home=`getent passwd "root" | awk -F: '{print $6}'`
-       info "Home set to: $home"
     fi
+
     [ -d $home ] || fatal "Can't find root's home directory ($home)."
+    
     mycnf="$home/.my.cnf"
+    
     if [ -f $mycnf ]
     then
        # rename temporarily
@@ -135,27 +112,64 @@ then
        debug "mv $mycnf $tmpcnf"
        mv $mycnf $tmpcnf
     fi
+    
     oldmask=`umask`
     umask 077
     cat > $mycnf <<EOF
 # auto generated backupninja mysql conf
 [mysql]
+host=$dbhost
 user=$dbusername
 password="$dbpassword"
 
 [mysqldump]
+host=$dbhost
 user=$dbusername
 password="$dbpassword"
 
 [mysqlhotcopy]
+host=$dbhost
 user=$dbusername
 password="$dbpassword"
 EOF
        umask $oldmask
-       defaultsfile="--defaults-file=$mycnf"
+       if [ $usevserver ] 
+       then
+           defaultsfile="--defaults-file=$vhome/.my.cnf"
+       else
+           defaultsfile="--defaults-file=$mycnf"
+       fi
+       
+# if user is set, don't use $mycnf     
 elif [ "$userset" == "false" ]; then
-       # if user is set, don't use $mycnf
-       defaultsfile="--defaults-file=$configfile"
+               defaultsfile="--defaults-file=$configfile"
+fi
+
+if [ "$user" == "" ]; then
+       userset=false;
+       user=root;
+else
+       userset=true;
+       if [ $usevserver ]
+       then
+           vuserhome=`$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$vuserhome"
+       else
+           userhome=`getent passwd "$user" | awk -F: '{print $6}'`
+           if [ $? -eq 2 ]
+           then
+               fatal "User $user not found in /etc/passwd"
+           fi
+               fi
+       
+       debug "User home set to: $userhome"
+       [ -f $userhome/.my.cnf ] || fatal "Can't find config file in $userhome/.my.cnf"
+       defaultsfile="--defaults-file=$vuserhome/.my.cnf"
+       debug "using $defaultsfile"
 fi
 
 #######################################################################
@@ -168,7 +182,8 @@ then
     then
        if [ $usevserver ]
        then
-               execstr="$VSERVER $vsname exec $MYSQLHOTCOPY --quiet --allowold --regexp /.\*/./.\*/ $hotdir"
+               info "dbhost: $dbhost"
+               execstr="$VSERVER $vsname exec $MYSQLHOTCOPY -h $dbhost --quiet --allowold --regexp /.\*/./.\*/ $hotdir"
        else
                execstr="$MYSQLHOTCOPY --quiet --allowold --regexp /.\*/./.\*/ $hotdir"
        fi
@@ -223,16 +238,16 @@ then
     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
+           databases=`echo 'show databases' | $VSERVER $vsname exec su $user -c "$MYSQL $defaultsfile" | grep -v Database`
+           if [ $? -ne 0 ]
+           then
+               fatal "Authentication problem, maybe user/password is wrong"
+           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"
+                   fatal "Authentication problem, maybe user/password is wrong"
                fi
        fi
 fi