23 января, 2012

Простой скрипт для бэкапа MySQL-баз

Сразу оговорюсь, для нагруженных серверов с тяжелыми БД нужно использовать репликацию и/или XtraBackup. Но если требуется организовать бэкап на машине, где работает полтора разработчика, или дохлой VPS'ке, то решение вполне подходящее.

#!/bin/sh
# Run script from this user
RUNAS="mysql"
# Credentials to run mysqldump
MYSQL_USER="root" 
MYSQL_PASS="SomePassword"
# database for backup
DATABASES="db1 db2"
# dir for backup
BDIR="/var/backup/mysql"

# If need be, switch user
if [ -n "$RUNAS" -a "$RUNAS" != "$(id -nu)" ] ; then
    su -c "$0" - $RUNAS 
    exit $?
fi

DATE=`date +"%Y-%m-%d_%H.%M"`

# create backup dir if not exist, exit on fail 
[ -d "$BDIR" ] || mkdir -p "$BDIR" || exit 1

# check write permission, exit if not granted
[ -w "$BDIR" ] || exit 1

for db in $DATABASES ; do
    # do backup
    /usr/bin/mysqldump -u "$MYSQL_USER" -p"$MYSQL_PASS" "$db" | \
        gzip -9c > "${BDIR}/${db}_${DATE}.sql.gz"
    # clear old files
    /usr/bin/find "$BDIR" -mtime +30 -name "${db}_*.sql.gz" -type f -delete
done

Для Ubuntu/Debina можно не задавать логин и пароль для mysqldump, воспользовавшись системной учетной записью (работает только под root):

/usr/bin/mysqldump --defaults-file=/etc/mysql/debian.cnf "$db" | \
    gzip -9c > "${BDIR}/${db}_${DATE}.sql.gz"

Комментариев нет:

Отправить комментарий