Hi,
Attached you can find a patch that resolves this problem.
The patch pipes the mysqldump output directly to bzip2/gzip.
Because of this you don't need to have alot of free diskspace to hold
the uncompressed .sql file while dumping the database.
Please consider to add this in the automysqlbackup package.
Thx
Jean-Louis
diff --git a/automysqlbackup b/automysqlbackup
index ddbea01..c9bbcd1 100755
--- a/automysqlbackup
+++ b/automysqlbackup
@@ -79,6 +79,9 @@ DOWEEKLY=6
# Choose Compression type. (gzip or bzip2)
COMP=gzip
+# Compress backups on the fly with gzip or bzip2 (yes or no)
+COMPDIRECT=no
+
# Compress communications between backup server and MySQL server?
COMMCOMP=no
@@ -250,8 +253,10 @@ fi
# Change Log
#=====================================================================
#
+# VER 2.6 - (2014-12-18)
+# Added direct compression support to save diskspace
# VER 2.5 - (2006-01-15)
-# Added support for setting MAXIMUM_PACKET_SIZE and SOCKET parameters (suggested by Yvo van Doorn)
+# Added support for setting MAXIMUM_PACKET_SIZE and SOCKET parameters (suggested by Yvo van Doorn)
# VER 2.4 - (2006-01-23)
# Fixed bug where weekly backups were not being rotated. (Fix by wolf02)
# Added hour an min to backup filename for the case where backups are taken multiple
@@ -350,7 +355,7 @@ DNOW=`date +%u` # Day number of the week 1 to 7 where 1 represents Monday
DOM=`date +%d` # Date of the Month e.g. 27
M=`date +%B` # Month e.g January
W=`date +%V` # Week Number e.g 37
-VER=2.5 # Version Number
+VER=2.6 # Version Number
LOGFILE=$BACKUPDIR/$DBHOST-`date +%N`.log # Logfile Name
LOGERR=$BACKUPDIR/ERRORS_$DBHOST-`date +%N`.log # Logfile Name
BACKUPFILES=""
@@ -420,26 +425,54 @@ exec 2> $LOGERR # stderr replaced with file $LOGERR.
# Functions
+SUFFIX=""
+
# Database dump function
dbdump () {
- touch $2
- chmod 600 $2
if [ $1 = "information_schema" ] ; then
NEWOPT="--skip-opt ${OPT}"
else
NEWOPT="--opt $OPT"
fi
- if [ -z "${USERNAME}" -o -z "${PASSWORD}" ] ; then
- mysqldump --defaults-file=/etc/mysql/debian.cnf $NEWOPT $1 > $2
+ if [ "$COMPDIRECT" = "yes" ] && ( [ "$COMP" = "gzip" ] || [ "$COMP" = "bzip2" ] ); then
+ if [ "$COMP" = "gzip" ]; then
+ SUFFIX=".gz"
+ touch "$2.gz"
+ chmod 600 "$2.gz"
+ if [ -z "${USERNAME}" -o -z "${PASSWORD}" ] ; then
+ mysqldump --defaults-file=/etc/mysql/debian.cnf $NEWOPT $1 | gzip -f > "$2.gz"
+ else
+ mysqldump --user=$USERNAME --password=$PASSWORD --host=$DBHOST $NEWOPT $1 | gzip -f > "$2.gz"
+ fi
+ elif [ "$COMP" = "bzip2" ]; then
+ SUFFIX=".bz2"
+ touch "$2.bz2"
+ chmod 600 "$2.bz2"
+ if [ -z "${USERNAME}" -o -z "${PASSWORD}" ] ; then
+ mysqldump --defaults-file=/etc/mysql/debian.cnf $NEWOPT $1 | gzip -f > "$2.bz2"
+ else
+ mysqldump --user=$USERNAME --password=$PASSWORD --host=$DBHOST $NEWOPT $1 | gzip -f > "$2.bz2"
+ fi
+ fi
else
- mysqldump --user=$USERNAME --password=$PASSWORD --host=$DBHOST $NEWOPT $1 > $2
+ touch $2
+ chmod 600 $2
+ if [ -z "${USERNAME}" -o -z "${PASSWORD}" ] ; then
+ mysqldump --defaults-file=/etc/mysql/debian.cnf $NEWOPT $1 > $2
+ compression $2
+ else
+ mysqldump --user=$USERNAME --password=$PASSWORD --host=$DBHOST $NEWOPT $1 > $2
+ compression $2
+ fi
+ fi
+ if [ "$LATEST" = "yes" ]; then
+ cp $1$SUFFIX "$BACKUPDIR/latest/"
fi
return 0
}
# Compression function plus latest copy
-SUFFIX=""
compression () {
if [ "$COMP" = "gzip" ]; then
gzip -f "$1"
@@ -454,9 +487,6 @@ elif [ "$COMP" = "bzip2" ]; then
else
echo "No compression option set, check advanced settings"
fi
-if [ "$LATEST" = "yes" ]; then
- cp $1$SUFFIX "$BACKUPDIR/latest/"
-fi
return 0
}
@@ -536,7 +566,6 @@ echo ======================================================================
fi
echo Monthly Backup of $MDB...
dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
- compression "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql$SUFFIX"
echo ----------------------------------------------------------------------
done
@@ -572,7 +601,6 @@ echo ======================================================================
rm -fv "$BACKUPDIR/weekly/$DB/${DB}_week.$REMW".*
echo
dbdump "$DB" "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"
- compression "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql$SUFFIX"
echo ----------------------------------------------------------------------
@@ -583,7 +611,6 @@ echo ======================================================================
rm -fv "$BACKUPDIR/daily/$DB"/*."$DOW".sql.*
echo
dbdump "$DB" "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"
- compression "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql$SUFFIX"
echo ----------------------------------------------------------------------
fi
@@ -599,7 +626,6 @@ echo ======================================================================
if [ "$DOM" = "01" ]; then
echo Monthly full Backup of \( $MDBNAMES \)...
dbdump "$MDBNAMES" "$BACKUPDIR/monthly/$DATE.$M.all-databases.sql"
- compression "$BACKUPDIR/monthly/$DATE.$M.all-databases.sql"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/monthly/$DATE.$M.all-databases.sql$SUFFIX"
echo ----------------------------------------------------------------------
fi
@@ -619,7 +645,6 @@ echo ======================================================================
rm -fv "$BACKUPDIR/weekly/week.$REMW".*
echo
dbdump "$DBNAMES" "$BACKUPDIR/weekly/week.$W.$DATE.sql"
- compression "$BACKUPDIR/weekly/week.$W.$DATE.sql"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/weekly/week.$W.$DATE.sql$SUFFIX"
echo ----------------------------------------------------------------------
@@ -631,7 +656,6 @@ echo ======================================================================
rm -fv "$BACKUPDIR"/daily/*."$DOW.sql".*
echo
dbdump "$DBNAMES" "$BACKUPDIR/daily/$DATE.$DOW.sql"
- compression "$BACKUPDIR/daily/$DATE.$DOW.sql"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/daily/$DATE.$DOW.sql$SUFFIX"
echo ----------------------------------------------------------------------
fi
diff --git a/debian/defaults b/debian/defaults
index 549e87c..c1d9e61 100644
--- a/debian/defaults
+++ b/debian/defaults
@@ -67,6 +67,9 @@ DOWEEKLY=6
# Choose Compression type. (gzip or bzip2)
COMP=gzip
+# Compress backups on the fly with gzip or bzip2 (yes or no)
+COMPDIRECT=no
+
# Compress communications between backup server and MySQL server?
COMMCOMP=no