mysql:
. Fixed case where odd combination of configuration options caused sqldump
backups to get overwritten with an empty file (Closes: #402679)
+ . Added 'nodata' option to enable you to specify tables that you want to omit
+ the data from a backup, but still backup the table structure. This is very
+ useful in cases where tables contain large amounts of cache data. See the
+ example.mysql for options, thanks Daniel Bonniot (Closes: #408829)
pgsql:
. Support configuring PGSQLUSER for real, and document it a bit; this
broken support actually prevented pgsql handler to work for VServers
# which databases to backup. should either be the word 'all' or a
# space separated list of database names.
#
+# nodata = < table1 table2 table3 > (no default)
+# only dump the structure for the database tables listed here, this means
+# no data contained in these tables will be dumped. This is very useful
+# to backup databases that have tables with cache stored in tables that
+# isn't necessary to backup, but you still need the structure to exist
+# on a restore
+#
# backupdir = < path/to/destination > (default = /var/backups/mysql)
# where to dump the backups. hotcopy backups will be in a subdirectory
# 'hotcopy' and sqldump backups will be in a subdirectory 'sqldump'
getconf backupdir /var/backups/mysql
getconf databases all
getconf ignores
+getconf nodata
getconf dbhost localhost
getconf hotcopy no
getconf sqldump no
## This only works for mysqldump at the moment
ignore=''
-for i in $ignores; do
+for i in $ignores $nodata; do
ignore="$ignore --ignore-table=$i"
done
fatal "Authentication problem, maybe user/password is wrong or mysqld is not running?"
fi
fi
-fi
+ fi
for db in $databases
do
+ DUMP_BASE="$MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names"
+
+ # Dumping structure and data
+ DUMP="$DUMP_BASE $ignore $db"
+
+ # If requested, dump only the table structure for this database
+ if echo "$nodata" | grep -E '(^|[[:space:]])'"$db\." >/dev/null
+ then
+ # Get the structure of the tables, without data
+ DUMP_STRUCT="$DUMP_BASE --no-data $db"
+ for qualified_table in $nodata
+ do
+ table=$( expr match "$qualified_table" "$db\.\([^\w]*\)" )
+ DUMP_STRUCT="$DUMP_STRUCT $table"
+ done
+ DUMP="( $DUMP; $DUMP_STRUCT )"
+ fi
if [ $usevserver = yes ]
then
# Test to make sure mysqld is running, if it is not sqldump will not work
fatal "Either you have an authentication problem, or mysqld doesn't appear to be running!"
fi
if [ "$compress" == "yes" ]; then
- execstr="$VSERVER $vsname exec $MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $ignore $db | $GZIP > $vroot$dumpdir/${db}.sql.gz"
+ execstr="$VSERVER $vsname exec $DUMP | $GZIP > $vroot$dumpdir/${db}.sql.gz"
else
- execstr="$VSERVER $vsname exec $MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $ignore $db -r $vroot$dumpdir/${db}.sql"
+ execstr="$VSERVER $vsname exec $DUMP -r $vroot$dumpdir/${db}.sql"
fi
else
# Test to make sure mysqld is running, if it is not sqldump will not work
fatal "Either you have an authentication problem, or mysqld doesn't appear to be running!"
fi
if [ "$compress" == "yes" ]; then
- execstr="$MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $ignore $db | $GZIP > $dumpdir/${db}.sql.gz"
+ execstr="$DUMP | $GZIP > $dumpdir/${db}.sql.gz"
else
- execstr="$MYSQLDUMP $defaultsfile --lock-tables --complete-insert --add-drop-table --quick --quote-names $ignore $db -r $dumpdir/${db}.sql"
+ execstr="$DUMP -r $dumpdir/${db}.sql"
fi
fi
debug "su $user -c \"$execstr\""