有人找我要備份腳本,我就只好丟出我的啦! 在這邊先感謝貓言貓語的作者~ 我是參考他寫的自動備份網站檔案和數據庫上傳到FTP空間,再另外修改成用WinRAR來壓縮的方式做備份,因為一般普通人比較認識WinRAR,而且我之前寫的只適用區網 🤖🤓🤖
用VPS的人一樣可以參考這個檔案,只要建立好備份檔位置以及腳本加權限就可以了。
*********更新歷史*********
2010/10/01 – 首次發表
2010/10/09 – 因為有人搞不懂怎用在cPanel上面,而且要簡單易懂… 🤔 還好看到貓有寫新的文章,不然真想揍人。總之,08回來沒吃到西堤你丟災 😒👊💪
2010/10/25 – 添加自動修復資料庫語法
2014/08/27 – 修改信件寄出語法
2019/10/02 – 添加自動修復 MariaDB 資料庫語法
2019/11/01 – 新增Dropbox Uploader的自動備份腳本
mkd /public_html/backup
腳本來了~ 🤓 登入FTP後先在public_html目錄底下建立一個備份用的資料夾,然後在backup資料夾底下建立腳本WebDBtoFTP.sh,內容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#!/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 --default-character-set=utf8mb4 --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' |
chmod 700 /public_html/backup/WebDBtoFTP.sh
儲存好在FTP直接設定權限,最後在去cPanel控制台那邊的Cron Jobs設定
/home/使用者名稱/public_html/backup/WebDBtoFTP.sh
或是手動增加每天的凌晨1點15分執行備份的排程
sudo crontab -e
15 1 * * * sh /public_html/backup/WebDBtoFTP.sh
### 另外一個這是只備份MySQL資料庫到信箱的腳本 ~ DBtoMail.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/bin/bash ############### 你要修改的地方從這裡開始 ############### MYSQL_PATH=mysql # MySQL程式路徑,cPanel或安裝時沒指定位置的不用修改 MYSQLDUMP=mysqldump # MySQLDUMP程式路徑,cPanel或安裝時沒指定位置的不用修改 MYSQLCHECK=mysqlcheck # MySQLCHECK程式路徑,cPanel或安裝時沒指定位置的不用修改 MYSQL_USER=root # MySQL使用者名稱 MYSQL_PASS=MySQL密碼 # MySQL密碼 MAIL_TO=qoo@gmail.com # 資料庫發送到的郵箱 HOSTNAME=qoo.com # 主機名稱 BACKUP_DIR=/public_html/backup # 備份檔位置 ############### 你要修改的地方從這裡結束 ############### # 定義資料庫的名字和舊資料庫的名字 DBName=$HOSTNAME-DB_$(date +"%Y%m%d").tar.gz # 刪除本地7天前的資料 cd $BACKUP_DIR rm -f $BACKUP_DIR/$HOSTNAME-DB_$(date -d -7day +"%Y%m%d").tar.gz # 最佳化並自動修復資料庫 $MYSQLCHECK -u $MYSQL_USER -p$MYSQL_PASS -oA --auto-repair > /dev/null 2>&1 # 輸出資料庫,如果使用ROOT帳號會輸出成一個資料庫一個SQL檔 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 --default-character-set=utf8mb4 --single-transaction --skip-lock-tables ${db} > ${db}.sql) done # 壓縮所有資料庫為一個壓縮檔 rm -f information_schema.sql mysql.sql performance_schema.sql tar zcfP $BACKUP_DIR/$DBName $BACKUP_DIR/*.sql rm -f $BACKUP_DIR/*.sql # 附件方式寄送資料庫壓縮檔到信箱,如壓縮檔超過25MB請勿使用gmail信箱,Yahoo很會掉信也別用 echo "DBBACKUP" | mutt -s "$DBName" -a $BACKUP_DIR/$DBName $MAIL_TO |
這邊解釋一下
/usr/local/mysql/bin/mysqldump -uroot -p123456 --databases db1 db2 db3 > /home/backup/databackup.sql
這是貓的方式,會把全部的資料庫導在一個sql檔裡面,可能會對龜毛如我的人不方便判別,所以我修改成上面那樣按照資料庫名稱導出資料庫再用最高壓縮成一個壓縮檔。
感謝!終於是把不能自己備份的mediawiki弄成每天備份了。這樣就不怕服務器傲嬌了。 ?