本教程将帮助您使用 shell 脚本自动执行 Magento2 代码库和数据库备份过程。该脚本将按计划的时间间隔执行自动备份。该脚本还能够根据配置删除较旧的备份。
设置Magerun2
您需要在系统上下载并配置 Magerun2 脚本。
wget https://files.magerun.net/n98-magerun2.phar
mv n98-magerun2.phar /usr/local/bin/n98-magerun2
chmod +x /usr/local/bin/n98-magerun2
下载外壳脚本
您可以从以下位置下载 Magento2 备份脚本here。或者,使用以下命令使用 wget 命令下载脚本。
wget https://tecadmin.net/wp-content/downloads/scripts/magento2-backup.sh
您还可以复制下面的脚本并将其粘贴到您计算机上的文件中。
#!/bin/bash
#######################################################################################
##
## Magento 2 database and codebase backup script
## Written By: Rahul Kumar
## Written on: Mar 06, 2020
## Last Update: Mar 11, 2020
##
#######################################################################################
################## Modify below values ###############################################
MAGENTO_DOCUMENT_ROOT="/var/www/magento2"
BACKUP_PATH="/var/www/magento2/var/backups"
BACKUP_RETAIN_DAYS=30 # Number of days to keep a local backup copy
GZIP="/bin/gzip"
RM="/bin/rm"
MKDIR="/bin/mkdir"
N98_MAGERUN2="/usr/local/bin/n98-magerun2"
#######################################################################################
################## Do not change below values ###############
export PATH=/bin:/usr/bin:/usr/local/bin
TODAY="$(date "+%Y-%m-%d-%H-%M")"
CURRENT_BACKUP_DIR="${BACKUP_PATH}/${TODAY}"
#######################################################################################
################## Functions ###############################
exit_on_error(){
echo -e "$@"
exit 99
}
maintenance_mode(){
${N98_MAGERUN2} sys:maintenance ${1} --skip-root-check --root-dir=${MAGENTO_DOCUMENT_ROOT}
}
check_cmds(){
[ ! -x ${GZIP} ] && exit_on_error "FILENAME $GZIP does not exists. Make sure correct path is set in config section."
[ ! -x ${RM} ] && exit_on_error "FILENAME $RM does not exists. Make sure correct path is set in config section."
[ ! -x ${MKDIR} ] && exit_on_error "FILENAME $MKDIR does not exists. Make sure correct path is set config section."
[ ! -x ${N98_MAGERUN2} ] && exit_on_error "FILENAME $N98_MAGERUN2 does not exists. \nDownload script from https://files.magerun.net/ and Make sure correct path is set in config section."
}
create_backup_dir(){
[ ! -d ${CURRENT_BACKUP_DIR} ] && ${MKDIR} -p ${CURRENT_BACKUP_DIR}
}
database_backup(){
${N98_MAGERUN2} --skip-root-check --root-dir=${MAGENTO_DOCUMENT_ROOT} db:dump ${CURRENT_BACKUP_DIR}/database-${TODAY}.sql
if [ $? -eq 0 ]; then
echo "Database backup successfully completed"
else
maintenance_mode --off ##### Disable mainenence even database backup failed
exit_on_error "Database backup failed. "
fi
}
codebase_backup(){
cd $MAGENTO_DOCUMENT_ROOT && \
tar -cpzf ${CURRENT_BACKUP_DIR}/codebase-${TODAY}.tar.gz --exclude=var/* .
if [ $? -eq 0 ]; then
echo "Codebase backup successfully completed"
else
maintenance_mode --off ##### Disable mainenence even codebase backup failed
exit_on_error "Codebase backup failed. "
fi
}
cleanup_old_backup(){
REMOVE_DIR_NAME=`date "+%Y-%m-%d-%H-%M" --date="${BACKUP_RETAIN_DAYS} days ago"`
if [ ! -z ${BACKUP_PATH} ]; then
cd ${BACKUP_PATH}
if [ ! -z ${REMOVE_DIR_NAME} ] && [ -d ${REMOVE_DIR_NAME} ]; then
rm -rf ${REMOVE_DIR_NAME}
fi
fi
}
########################################################################################
################## Main (Calling functions) #####################
check_cmds
create_backup_dir
maintenance_mode --on
database_backup
codebase_backup
maintenance_mode --off
cleanup_old_backup
##########################################################################################
################## Script Ends Here ##################
##########################################################################################
计划备份脚本
安排此脚本使用crontab在您的系统上每天运行。使用以下命令编辑 crontab 配置:
crontab -e
并在文件末尾添加以下条目。
0 0 * * * sh magento2-backup.sh
保存文件并关闭。您已成功安排 cronjob 在每天中午 12:00 运行。了解有关使用 cronjob 的更多信息阅读本教程.