Я использую 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
Этот сценарий будет:
Этот сценарий должен быть довольно простым для настройки, если вы хотите - см. Расширенное руководство по сценариям на Bash чтобы узнать об этом больше.
... после того, как ваши базы данных будут скопированы и их можно будет найти в определенном месте, почему бы не автоматизировать получение резервных копий с помощью WinSCP вместо передачи файлов по FTP?