Liunx 每天自動備份檔案 scp 備份到另外一台電腦

如果大家看了,瓦特歐上一篇的ssh Linux 無密碼登入 SSH key登入教學
就會知道其實~瓦特歐目標是做自動備份這個功能,那這篇文章就是要介紹
並且記錄這個自動備份的成果(血淚)!
文章會使用到crontab、.sh撰寫、 .bat撰寫、 tar(壓縮指令)、mysqldump等
指令,大家也別緊張,看者這篇文章跟者做,各位也能實現自動備份功能!

首先,先從壓縮要備份的檔案和資料庫資料dump開始:


資料庫dump指令:
mysqldump -u 資料庫使用者 -p密碼 資料庫> /home/使用者/檔名.sql;
說明: 使用資料庫使用者讀取資料庫,複製整個資料庫,放到檔名.sql

資料夾壓縮指令:
tar -zcvf /home/使用者/壓縮完成的檔案名.tar.gz /home/使用者/想壓縮的資料夾
說明: 將/home/使用者路徑底下的想壓縮的資料夾
打包成壓縮完成的檔案名.tar.gz,存放到路徑:/home/使用者/

接者將上方的指令放入autobackup_folder.sh檔,並且執行看看:
指令: sh autobackup_folder.sh
PS:如果autobackup_folder.sh執行異常,可能是因為有換行符號,
請執行tr -d “\r” oldname.sh newname.sh,可以將換行符號去除!

autobackup_folder.sh內容:
!/bin/bash
now=”$(date +’%Y%m%d’)”
mysqldump -u 資料庫使用者 -p密碼 資料庫名稱 > /home/使用者/檔名$now.sql;
tar -zcvf /home/使用者/壓縮完成的檔案名$now.tar.gz /home/使用者/壓縮的資料夾

說明:自動去拿date,啟動sh時的的日期,將日期加入檔名中,區別每天的備份

以上是手動備份,一個.sh就將資料夾與sql備份一份的方式,接下來加入每天排程的部分:

自動排程設定:
路徑:/etc/
檔案名:crontab
在crontab加入需要跑的.sh
例如:想加入上面寫的autobackup_folder.sh

打開crontab會看到如圖:

加入以下指令去排每日定時啟動的腳本:

30 4 * * * root sh /腳本的資料夾/autobackup_folder.sh
說明:每天的4:30分,使用root身分,去啟動autobackup_folder.sh

當有自動備份,linux容量會減少很快,這時候也要排每日啟動檢查
檢查資料夾內過期的檔案,並且刪除!

在crontab內加入
35 4 * * * root find /home/使用者/ -mtime +2 -name “*.sql” -exec rm -rf {} \;
說明:每天的4:35分,使用root身分,去掃描使用者路徑底下創立日期大於當前時間
2天
所有含有.sql檔案並且刪除!

所有需要加的指令與檔案位置就到這邊~
概念就是確認手動腳本正常運作後,再到排成檔案去排甚麼時候啟動腳本一次。

windows腳本拉檔案的部分:
請寫一個bat檔,AutobackupfileCopy.bat內容如下:

SET Today=%DATE:~0,10%
SET TodayReplace=%Today:/=%
SET FolderPath=F^:^\myBackup
SET Backupfolder=%FolderPath%\%TodayReplace%backup\

if not exist %Backupfolder% (
md %Backupfolder%
echo create folder
)

scp -r 使用者@遠端主機ip:/home/使用者/檔名%TodayReplace%.sql %Backupfolder%
scp -r 使用者@遠端主機ip:/home/使用者/檔名_%TodayReplace%.tar.gz %Backupfolder%

紅色的部分:
設定變數,讀取今天日期,設定放備份檔案的資料夾路徑。
綠色的部分:當備份資料夾不存在時,自動創造資料夾。
藍色的部分:使用scp去將遠端主機,home/使用者路徑底下,
檔名內,含有今天日期的.sql與含有,今天日期的.gz
通通下載放到Backupfolder內。

整個流程概念就是,每天4.30那段時間會去備份資料放到linux主機,
路徑:/home/user/底下,再使用AutobackupfileCopy.bat
去將今天備份的檔案放入,Backupfolder內!
以上就是整個自動備份檔案的流程!大家可以參考看看,謝謝。



Leave a Comment