Last active
August 29, 2015 14:04
-
-
Save SammyLin/41aff5e75da792fa79ca to your computer and use it in GitHub Desktop.
Backup All Site(Web & mysql) use ubuntu 12.04 rsync to Qnap and Slack notification. keep daily, weekly, monthly data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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