Skip to content

Instantly share code, notes, and snippets.

@mouson
Forked from SammyLin/back_all_site.sh
Last active August 29, 2015 14:06
Show Gist options
  • Save mouson/c75ee8e9cbc61036a97e to your computer and use it in GitHub Desktop.
Save mouson/c75ee8e9cbc61036a97e to your computer and use it in GitHub Desktop.
#!/bin/sh
# crontab -e
# 0 0 * * 1-5 /bin/sh /home/backup/back_all_site.sh 'daily'
# 1 0 * * 6 /bin/sh /home/backup/back_all_site.sh 'weekly'
# 2 0 1 * * /bin/sh /home/backup/back_all_site.sh 'monthly'
BACKUP_TIME=`date +%Y%m%d%H%M%S`
BACKUP_FILENAME="${BACKUP_TIME}"
BACKUP_DIR='/home/backup'
RSYNC_PASSWORD_FILE='/etc/rsyncd.secrets'
DB_USER=user
DB_PASSWORD=password
NAS_USER=admin
NAS_IP=192.168.0.1
NAS_FOLDER='WebSiteBackUp/'
SLACK_CHANNEL='#general'
SLACK_URL='https://xxx.slack.com/services/hooks/incoming-webhook?token=xxxx'
# mysql_backup "PROJECT_NAME" "DB_NAME"
mysql_backup() {
PROJECT_NAME=$1
DB_NAME=$2
DELETE_FILE="${BACKUP_DIR}/deleteback-${PROJECT_NAME}-db.txt"
mkdir -p ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}
mysqldump -u $DB_USER -p"$DB_PASSWORD" $DB_NAME | gzip > ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}/${BACKUP_FILENAME}.sql.gz
ls --sort=time -1 ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}/* 2>/dev/null | tail -n+6 >> $DELETE_FILE
if [ -f "$DELETE_FILE" ]; then
cd ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}; xargs --arg-file $DELETE_FILE rm
sleep 1
delete_file $DELETE_FILE
fi
echo "successed db(${DB_NAME}) back up!!"
}
# web_backup "PROJECT_NAME" "WEB_FOLDER"
web_backup() {
PROJECT_NAME=$1
WEB_FOLDER=$2
DELETE_FILE="${BACKUP_DIR}/deleteback-${PROJECT_NAME}-db.txt"
mkdir -p ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}
tar -zcf ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}/${BACKUP_FILENAME}.tar.gz -C $BASE_DIR ${WEB_FOLDER}
ls --sort=time -1 ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}/* 2>/dev/null | tail -n+6 >> $DELETE_FILE
if [ -f "$DELETE_FILE" ]; then
cd ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}; xargs --arg-file $DELETE_FILE rm
sleep 1
delete_file $DELETE_FILE
fi
echo "successed web(${WEB_NAME}) back up!!"
}
backup_to_nas() {
rsync -av --delete --password-file=${RSYNC_PASSWORD_FILE} ${BACKUP_DIR} $NAS_USER@$NAS_IP::$NAS_FOLDER
}
delete_file() {
rm -f "$1"
}
send_slack() {
MASSAGE=$1
if [ ! -z "$SLACK_URL" ]; then
curl -X POST --data-urlencode 'payload={"channel": "'"${SLACK_CHANNEL}"'", "username": "BackupBot", "text": "'"${MASSAGE}"'", "icon_url": "http://i.imgur.com/hOXJBMJl.png"}' ${SLACK_URL}
fi
}
case $1 in
"daily")
FREQUENCY="daily"
FREQUENCY_TEXT="每天定期"
;;
"weekly")
FREQUENCY="weekly"
FREQUENCY_TEXT="每週定期"
;;
"monthly")
FREQUENCY="monthly"
FREQUENCY_TEXT="每月定期"
;;
*)
echo "only daily; weekly; monthly;"
exit 1
;;
esac
if [ ! -z "$FREQUENCY" ]; then
if [ -z "$RSYNC_PASSWORD_FILE" ] || [ ! -f "$RSYNC_PASSWORD_FILE" ]; then
echo "\RSYNC_PASSWORD_FILE not found "
else
send_slack "準備進行 ${FREQUENCY_TEXT} 備份所有網站資料及資料庫了,請把安全帶繫好~"
# Web1
mysql_backup "XXX.com.tw" "Web1"
web_backup "XXX.com.tw" "/home/Web1"
# Web2
mysql_backup "OOO.com.tw" "Web2"
web_backup "OOO.com.tw" "/home/Web2"
# BackUp To NAS
backup_to_nas
send_slack "好了 可以解開安全帶了,${FREQUENCY_TEXT} 備份完成了"
exit;
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment