Назад | Перейти на главную страницу

Помощь в написании сценария Linux для резервного копирования и ftp файлов на другой сервер

Я использую MySQL в качестве системы баз данных для своего приложения в системе Linux. Каждую неделю обновляю систему и делаю резервные копии (mysqldump) измененных баз (2 базы). Затем я .tar.gz их и ftp полученный файл на удаленный сервер Windows, после чего удаляю исходные резервные копии и файлы tar.gz с сервера Linux. Будучи полным новичком, когда речь идет о системах Unix, я хотел бы знать, можно ли написать сценарий, который бы делал все это автоматически, т.е. выполнял следующие шаги.

1) Резервное копирование базы данных A на A.sql (mysqldump) 2) Резервное копирование базы данных B на B.sql (mysqldump) 3) tar -cvzf dest.tar.gz A.sql B.sql 4) ftp dest.tar.gz на ftp @ remoteserver.com 5) Удалите A.sql, B.sql, dest.tar с локального сервера

Было бы здорово, если бы я сделал несколько шагов в правильном направлении! Заранее спасибо, Тим

Я бы не рекомендовал использовать FTP для любых файлов, которые вам нужны (особенно для резервных копий базы данных, если эта база данных содержит информацию о клиентах), но в конечном итоге это зависит от вас.

Для начала напишите сценарий создания резервных копий на сервере Linux примерно так:

#!/bin/bash
# 
# Call script with:
# /cron-mysql_bkup.sh mysql_hostname mysql_username mysql_password /backup/directory
# 
if [ -n "$1" ]; then
 MYSQL_HOST="$1"
else
 echo "MYSQL_HOST not specified."
 exit 1
fi
if [ -n "$2" ]; then
 MYSQL_USER="$2"
else
 echo "MYSQL_USER not specified."
 exit 1
fi
if [ -n "$3" ]; then
 MYSQL_PASS="$3"
else
 echo "MYSQL_PASS not specified."
 exit 1
fi
if [ -n "$4" ]; then
 DIR_BKUP="$4"
 mkdir -p ${DIR_BKUP}
else
 echo "DIR_BKUP not specified."
 exit 1
fi
# 
# Generate filename
# 
BACKUP_FILENAME=`date "+%Y-%m-%d"`".sql"
# 
# Dump all databases
# 
mysqldump -h${MYSQL_HOST} -u${MYSQL_USER} -p${MYSQL_PASS} --all-databases > ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_FILENAME}
# 
# Write status of the operation to the mysql.log file in the backup directory
# 
if [ $? -ne 0 ]; then
 echo `date`" - ERROR creating backups of host "${MYSQL_HOST} >> ${DIR_BKUP}/mysql.log
else
 echo `date`" - MySQL Backup complete for "${MYSQL_HOST} >> ${DIR_BKUP}/mysql.log
 BACKUP_TAR_NAME=${BACKUP_FILENAME}".tar.gz"
 tar czf ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_TAR_NAME} ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_FILENAME} && rm ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_FILENAME}
fi

Этот сценарий будет:

  1. Проверить, все ли необходимые параметры установлены
  2. Выгрузите все базы данных MySQL в файл с именем YYYY-mm-dd.sql в указанном каталоге резервных копий (этот каталог будет создан, если он не существует)
  3. GZIP файл и, если операция GZIP завершится успешно, удалите исходный файл SQL.

Этот сценарий должен быть довольно простым для настройки, если вы хотите - см. Расширенное руководство по сценариям на Bash чтобы узнать об этом больше.

... после того, как ваши базы данных будут скопированы и их можно будет найти в определенном месте, почему бы не автоматизировать получение резервных копий с помощью WinSCP вместо передачи файлов по FTP?