Наверное, всем нам часто приходится делать резервные копии для сайтов на 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. В таком случае вам нужно немного исправить код скрипта, добавив эту строку после объявления скрипта
shopt -s extglob |
Что делает этот скрипт?
- Дает возможность выбрать вариант резервного копирования
- Только база данных
- Только файлы
- База данных и файлы
- Делает дамп базы данных согласно настроек .xml файла конфига
- Делает бэкап фалов в .tar.gz архив и дает возможность указывать копировать медиа данные или нет. Обратите внимание, что по умолчанию папки var и includes не включены в архив.
- Удаляет дамп базы после того как файл включен в архив
- Создает папку backup, если она не существует.
- Копирует архив проекта в папку backup.
Также вы можете установить cron задачи для этого скрипта.
Как запускать скрипт?
- Отредактировать _magebackup.sh и настроить переменные «ProjectName» и «BackupDir»
- Добавить отредактированный _magebackup.sh в корень вашего сайта на Magento
- После выполнить серию команд в терминале:
cd /path/to/magento/root chmod +x _magebackup.sh ex -sc $'%s/\r$//e|x' _magebackup.sh sh _magebackup.sh |
После этих шагов вы получите сжатый архив с бэкапом сайта согласно настроек в директории backup.
Вот и все, надеюсь информация будет полезной для вас при разработке сайтов на Magento.
Спонсоры статьи: