applied patch to rdiff.helper, removed /etc/passwd from mysql handler.
[matthijs/upstream/backupninja.git] / handlers / mysql
index 13dd62f2643a9d3be9ffdcaf0e82df2555d8cdc0..569b0a206d21dc4b509539fd969c2ce6e9d181e3 100644 (file)
@@ -4,6 +4,7 @@
 
 getconf backupdir /var/backups/mysql
 getconf databases all
+getconf ignores
 getconf dbhost localhost
 getconf hotcopy no
 getconf sqldump no
@@ -21,14 +22,22 @@ if [ "$user" == "" ]; then
        user=root;
 else
        userset=true;
-       userhome=`grep "^$user:" /etc/passwd | awk -F: '{print $6}'`
+       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
 
-if [ "$VSERVERS" = "yes" ]
+if [ "$vservers" = "yes" ]
 then
        if [ ! -z $vsname ]
        then            
@@ -39,11 +48,16 @@ then
        fi
 fi
 
-# Check to make sure that the specified vserver exists
+# If needed, make sure that the specified vserver exists and is running.
 if [ $usevserver ]
 then
+       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."
 fi
        
 # create backup dirs, the vroot variable will be empty if no vsname was specified
@@ -81,7 +95,7 @@ fi
 
 defaultsfile=""
 if [ "$dbusername" != "" -a "$dbpassword" != "" ]; then
-       home=`grep '^root:' /etc/passwd | awk -F: '{print $6}'`
+       home=`getent passwd "root" | awk -F: '{print $6}'`
        [ -d $home ] || fatal "Can't find root's home directory ($home)."
        mycnf="$home/.my.cnf"
        if [ -f $mycnf ]; then
@@ -96,15 +110,15 @@ if [ "$dbusername" != "" -a "$dbpassword" != "" ]; then
 # auto generated backupninja mysql conf
 [mysql]
 user=$dbusername
-password=$dbpassword
+password="$dbpassword"
 
 [mysqldump]
 user=$dbusername
-password=$dbpassword
+password="$dbpassword"
 
 [mysqlhotcopy]
 user=$dbusername
-password=$dbpassword
+password="$dbpassword"
 EOF
        umask $oldmask
        defaultsfile="--defaults-file=$mycnf"
@@ -176,9 +190,9 @@ if [ "$sqldump" == "yes" ]; then
        for db in $databases; do
                if [ $usevserver ]
                then
-                       execstr="$VSERVER $vsname exec $MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $db > $vroot$dumpdir/${db}.sql"
+                       execstr="$VSERVER $vsname exec $MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $ignore $db > $vroot$dumpdir/${db}.sql"
                else
-                       execstr="$MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $db > $dumpdir/${db}.sql"
+                       execstr="$MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $ignore $db > $dumpdir/${db}.sql"
                fi
                debug "su $user -c '$execstr'"
                if [ ! $test ]; then