#!/bin/bash
############### 你要修改的地方從這裡開始 ###############
MYSQL_USER="MySQL使用者名稱" 			# MySQL使用者名稱
MYSQL_PASS="MySQL密碼" 		# MySQL密碼
HOSTNAME="要備份的網站名稱" 			# 要備份的網站名稱
WEB_DATA="要備份的網站位置" 	# 要備份的網站位置
BACKUP_DIR="要備份的網站位置" 		# 本機存放備份檔的位置
FTP_IP="FTP地址" 		# FTP地址
FTP_USER="FTP使用者名稱" 		# FTP使用者名稱
FTP_PASS="FTP密碼" 			# FTP密碼
FTP_BACKUP="FTP上存放備份檔案的位置" 	# FTP上存放備份檔案的位置
############### 你要修改的地方從這裡結束 ###############
MYSQL_PATH=mysql                   # MySQL程式路徑，可用whereis mysql指令查詢
MYSQLDUMP=mysqldump                # MySQLDUMP程式路徑，可用whereis mysqldump指令查詢
MYSQLCHECK=mysqlcheck              # MySQLCHECK程式路徑，可用whereis mysqlcheck指令查詢
# 定義資料庫的名字和舊資料庫的名字
DBName=$HOSTNAME-MySQL_$(date +"%Y%m%d").tar.gz
OldDB=$HOSTNAME-MySQL_$(date -d -3day +"%Y%m%d").tar.gz
# 定義網站資料的名字和舊網站資料的名字
WebName=$HOSTNAME-Web_$(date +%Y%m%d).tar.gz
OldWeb=$HOSTNAME-Web_$(date -d -3day +"%Y%m%d").tar.gz
##################################################
### 刪除本地端3天前的資料
echo "=================================================="
echo "Backup databases and web started"
find "$BACKUP_DIR" -mtime +3 -type d -exec rm -rf {} \;
rm -f $BACKUP_DIR/$HOSTNAME-MySQL_$(date -d -3day +"%Y%m%d").tar.gz
rm -f $BACKUP_DIR/$HOSTNAME-Web_$(date -d -3day +"%Y%m%d").tar.gz

### 建立備份資料夾
echo "=================================================="
echo "To create a new directory, set filename based on the date"
mkdir -p $BACKUP_DIR
cd $BACKUP_DIR

# 最佳化並自動修復資料庫
echo "=================================================="
echo "Check the databases with optimize tables, auto repair"
$MYSQLCHECK -u $MYSQL_USER -p$MYSQL_PASS -oA --auto-repair > /dev/null 2>&1

#輸出資料庫，如果使用ROOT帳號會輸出成一個資料庫一個SQL檔
echo "=================================================="
echo "To dump each database in a separate file"
for db in `$MYSQL_PATH -u $MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
($MYSQLDUMP -u $MYSQL_USER -p$MYSQL_PASS --single-transaction --skip-lock-tables ${db} > ${db}.sql)
done

# 壓縮所有資料庫為一個壓縮檔並刪除所有的SQL檔
echo "=================================================="
echo "Compressing datebase files"
rm -f information_schema.sql mysql.sql performance_schema.sql
tar zcfP $BACKUP_DIR/$DBName $BACKUP_DIR/*.sql
rm -f $BACKUP_DIR/*.sql
#壓縮網站資料
echo "Compressing website files"
tar zcfP $BACKUP_DIR/$WebName $WEB_DATA --exclude=wp-content/cache --exclude=wp-content/akeebabackupwp --exclude=wp-content/updraft

# 上傳到FTP空間並刪除FTP空間過期的資料
echo "=================================================="
echo "Send files via FTP"
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
lcd $BACKUP_DIR
cd $FTP_BACKUP
delete $OldDB
delete $OldWeb
put $DBName
put $WebName
bye
END
echo "=================================================="
echo "Web and Database backup successfully completed!"
echo "=================================================="

# ring a bell
printf '\007'