Сразу оговорюсь, для нагруженных серверов с тяжелыми БД нужно использовать репликацию и/или 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"
Комментариев нет:
Отправить комментарий