Skip to content

Instantly share code, notes, and snippets.

@Debcharon
Last active June 5, 2024 13:08
Show Gist options
  • Save Debcharon/a8857d91c33797a3b3e529dd3783b995 to your computer and use it in GitHub Desktop.
Save Debcharon/a8857d91c33797a3b3e529dd3783b995 to your computer and use it in GitHub Desktop.
Backup website and MySQL database with one script
#!/usr/bin/env bash
# Function: Backup website and mysql database
# Author: licess
# Modified by: Microcharon
# Website: https://lnmp.org
# IMPORTANT!!! Please Setting the following Values!
Backup_Home="/home/backup/"
MySQL_Dump="/usr/local/mysql/bin/mysqldump"
######~Set Directory you want to backup~######
Backup_Dir=("/home/wwwroot/example.com" "/home/wwwroot/test.example.com")
######~Set MySQL Database you want to backup~######
Backup_Database=("data", "test")
######~Set MySQL UserName and password~######
MYSQL_UserName='root'
MYSQL_PassWord='yourrootpassword'
######~Enable Rclone Backup~######
Enable_Rclone=1
# 0: enable; 1: disable
######~Set Rclone Remote Information~######
Drive_Name='drive_name'
Drive_Dir='backup'
######~Enable Ftp Backup~######
Enable_FTP=1
# 0: enable; 1: disable
######~Set FTP Information~######
FTP_Host='ftp.example.com'
FTP_Username='ftp_user'
FTP_Password='yourftppassword'
FTP_Dir="backup"
# Values Setting END!
AllWWWBackup=www-*.tar.gz
AllDBBackup=db-*.sql
TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
Backup_Dir() {
Backup_Path=$1
Dir_Name=`echo ${Backup_Path##*/}`
Pre_Dir=`echo ${Backup_Path} | sed 's/'${Dir_Name}'//g'`
tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
Backup_Sql() {
${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
}
if [ ! -f ${MySQL_Dump} ]; then
echo "mysqldump command not found. please check your setting."
exit 1
fi
if [ ! -d ${Backup_Home} ]; then
mkdir -p ${Backup_Home}
fi
if [ ${Enable_FTP} = 0 ]; then
type lftp >/dev/null 2>&1 || { echo >&2 "lftp command not found. Install: centos:yum install lftp, debian/ubuntu:apt-get install lftp."; }
fi
echo "Deleting old backup files..."
rm -f ${Backup_Home}www-*.tar.gz
rm -f ${Backup_Home}db-*.sql
echo "Backup website files..."
for dd in ${Backup_Dir[@]}; do
Backup_Dir ${dd}
done
echo "Backup Databases..."
for db in ${Backup_Database[@]}; do
Backup_Sql ${db}
done
if [ ${Enable_Rclone} = 0 ]; then
echo "Deleting old backup files on ${Drive_Name} drive..."
rclone delete --min-age 1d ${Drive_Name}:${Drive_Dir} --include "www-*.tar.gz"
rclone delete --min-age 1d ${Drive_Name}:${Drive_Dir} --include "db-*.sql"
echo "Uploading backup files to ${Drive_Name} drive..."
rclone copy --ignore-existing ${Backup_Home} ${Drive_Name}:${Drive_Dir}
fi
if [ ${Enable_FTP} = 0 ]; then
echo "Uploading backup files to ftp..."
cd ${Backup_Home}
lftp ${FTP_Host} -u ${FTP_Username},${FTP_Password} << EOF
cd ${FTP_Dir}
mrm ${AllWWWBackup}
mrm ${AllDBBackup}
mput ${TodayWWWBackup}
mput ${TodayDBBackup}
bye
EOF
echo "complete."
fi
@Debcharon
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment