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