#!/bin/bash # # Copyright (c) 2002, 2003, 2004, 2005 Peter Palfrader # # All rights reserved. # umask 037 set -e set -u DATE=`date "+%Y%m%d-%H%M%S"` if [ -d /var/backups/local/mysql ]; then TARGET=/var/backups/local/mysql elif [ -d /var/local/backup/mysql ]; then TARGET=/var/local/backup/mysql elif [ -d /aux/dbbackup/mysql ]; then TARGET=/aux/dbbackup/mysql else echo "Cannot find a backup target directory" >&2 exit 1 fi HOSTS="$@" if [ -z "$HOSTS" ]; then HOSTS="localhost" fi if [ -z "${CONCURRENCY_LEVEL:-}" ]; then CONCURRENCY_LEVEL=1 fi for host in $HOSTS; do if [ "$host" = "localhost" ]; then prefix=""; postfix=""; else shorthost=`echo "$host" | sed -e 's/\..*//'` prefix="$shorthost--"; postfix="--$shorthost"; fi mysqlcnf="$HOME/.my.cnf$postfix" if ! [ -e "$mysqlcnf" ]; then echo "Cannot find my.cnf for host $host: $mysqlcnf" >&2 exit 1 fi DBs=$( echo 'SHOW DATABASES;' | mysql --defaults-file="$mysqlcnf" --host="$host" | tail -n +2 | while read db; do if [ "$db" = "innodb" ] || [ "$db" = "test" ] || [ "$db" = "lost+found" ] ; then continue; fi echo $db; done ); for db in $DBs; do file="$TARGET/$DATE-$prefix$db" mysqldump --defaults-file="$mysqlcnf" --host="$host" --opt --lock-tables -- "$db" > "$file" done for db in $DBs; do file="$TARGET/$DATE-$prefix$db" echo $file done | xargs --no-run-if-empty --max-procs "$CONCURRENCY_LEVEL" -n 1 bzip2 for db in $DBs; do file="$TARGET/$DATE-$prefix$db" md5=`md5sum -- "$file.bz2" | awk '{print $1}'` if [ -e "$TARGET/MD5-$md5" ]; then rm -- "$file.bz2" ln "$TARGET/MD5-$md5" "$file.bz2" else ln "$file.bz2" "$TARGET/MD5-$md5" fi done done