Делаем бэкап файлов и БД Magento используя bash скрипт

Наверное, всем нам часто приходится делать резервные копии для сайтов на Magento. И хотя система располагает инструментом для резервного копирования через панель администратора, делать это не всегда удобно или возможно, или просто есть необходимость использовать командную строку для резервного копирования.

Именно для этих целей Raj из magepsycho.com предлагает использовать bash скрипт для резервного копирования. Ниже приведен сам код скрипта, а после него идут комментарии и пояснения к коду.

#!/bin/bash
#@author        MagePsycho <magepsycho@gmail.com>
#@website       http://www.magepsycho.com
#@version       0.1.0
 
#/************************ EDIT VARIABLES ************************/
projectName=magepsycho
backupDir=/home/magepsycho/_backups
#/************************ //EDIT VARIABLES **********************/
 
dbXmlPath="app/etc/local.xml"
{
host="$(echo "cat /config/global/resources/default_setup/connection/host/text()" | xmllint --nocdata --shell $dbXmlPath | sed '1d;$d')"
username="$(echo "cat /config/global/resources/default_setup/connection/username/text()" | xmllint --nocdata --shell $dbXmlPath | sed '1d;$d')"
password="$(echo "cat /config/global/resources/default_setup/connection/password/text()" | xmllint --nocdata --shell $dbXmlPath | sed '1d;$d')"
dbName="$(echo "cat /config/global/resources/default_setup/connection/dbname/text()" | xmllint --nocdata --shell $dbXmlPath | sed '1d;$d')"
}
 
fileName=$projectName-$(date +"%Y-%m-%d")
printf "What kind of backup you would like?\n[ d ] DB backup only\n[ f ] Files backup only\n[ b ] Files backup with DB\n"
read backupType
if [[ $backupType = @(d|b) ]]; then
    echo "----------------------------------------------------"
    echo "Dumping MySQL..."
    mysqldump -h $host -u $username -p$password $dbName > $fileName.sql
    echo "Done!"
fi
 
if [[ $backupType = @(f|b) ]]; then
    echo "----------------------------------------------------"
    echo "Archiving Files..."
    printf "Skip /media folder?\ny: Yes\nn: No\n"
    read skipMedia
    if [ $skipMedia == y ]; then
        tar -zcf $fileName.tar.gz --exclude=var --exclude=includes --exclude=media * .htaccess
    else
        tar -zcf $fileName.tar.gz --exclude=var --exclude=includes * .htaccess
    fi
    echo "Done!"
    echo "----------------------------------------------------"
    echo "Cleaning..."
    rm -f $fileName.sql
    echo "Done!"
fi
 
if [[ $backupType = @(d|f|b) ]]; then
    echo "----------------------------------------------------"
    mkdir -p $backupDir;
    echo "Moving file to backup dir..."
    if [ $backupType == d ]; then
        mv $fileName.sql $backupDir
    fi
 
    if [[ $backupType = @(f|b) ]]; then
        mv $fileName.tar.gz $backupDir
    fi
    echo "Done!"
else
    echo "Invalid selection!"
fi

Внимание! Возможно при использовании скрипта вы получите сообщение об ошибке:

syntax error in conditional expression: unexpected token `(‘
line 24: syntax error near `@(d’
line 24: `if [[ $backupType = @(d|b) ]]; then’

Причиной этого сообщения может быть то, что вы используете версию bash ниже 4.0. В таком случае вам нужно немного исправить код скрипта, добавив эту строку после объявления скрипта

Читать также:
Понимание JavaScript behaviors в Drupal
shopt -s extglob

Что делает этот скрипт?

  1. Дает возможность выбрать вариант резервного копирования
    • Только база данных
    • Только файлы
    • База данных и файлы
  2. Делает дамп базы данных согласно настроек .xml файла конфига
  3. Делает бэкап фалов в .tar.gz архив и дает возможность указывать копировать медиа данные или нет. Обратите внимание, что по умолчанию папки var и includes не включены в архив.
  4. Удаляет дамп базы после того как файл включен в архив
  5. Создает папку backup, если она не существует.
  6. Копирует архив проекта в папку backup.

Также вы можете установить cron задачи для этого скрипта.

Как запускать скрипт?

  1. Отредактировать _magebackup.sh и настроить переменные «ProjectName» и «BackupDir»
  2. Добавить отредактированный _magebackup.sh в корень вашего сайта на Magento
  3. После выполнить серию команд в терминале:
cd /path/to/magento/root
chmod +x _magebackup.sh
ex -sc $'%s/\r$//e|x' _magebackup.sh
sh _magebackup.sh

После этих шагов вы получите сжатый архив с бэкапом сайта согласно настроек в директории backup.

Вот и все, надеюсь информация будет полезной для вас при разработке сайтов на Magento.

Спонсоры статьи:
Оцените статью
Добавить комментарий