利用命令行工具創建Linux/Mac系統下的網站備份
創建網站備份應該是一個網站管理員最為重要的日常工作之一。但現實情況是,備份這一步往往被很多人忽略,也就是說仍然有很多網管的網站安全意識較低。
所有的Linux/Mac用戶都能夠零經濟成本地通過命令行工具創建網站備份。如果你用的不是Linux/Mac,請關注我們的后續文章——如何在windows上通過軟件方式創建備份。
本文的初衷不是為讀者提供完整的備份解決方案,而是給那些有時間并且想要學習一些基礎的命令行工具進行網站備份的寶寶們一點參考。
必要條件
你的主機必須具備必要的軟件及證書。
服務器上的軟件:
- tar
電腦上的軟件:
- SSH(用于創建/刪除備份文件)
- SCP(用于下載備份文件)
- Terminal(例如gnome-terminal,用于運行所有命令)
所需信息
- 服務器IP及SSH證書
- 數據庫證書
- 網站根目錄(以及你想在備份中加入或排除內容的目錄)
- 數據庫:MySQL、PostgreSQL或SQLite(如果你的網站使用其中一種)
備份創建的具體步驟
一旦將你的電腦與服務器相連接,你就可以快速地通過命令進行網站備份。
通過SSH連接服務器:
SSH是Secure Shell的簡寫,通常用于遠程命令的執行。
打開terminal,鍵入以下命令,通過SSH協議連入你的服務器:
在terminal中連上服務器后,你鍵入的每一條命令都在你的服務器上執行。接下來,我們要在服務器上創建一個名為“backup(備份)”的新文件夾。只要不是公開的,你可以把這個文件夾放在任何地方。
如果你的web應用根目錄為:/home/username/html,那么我們就能夠順利在 /home/username/中創建“backup(備份)”的文件夾。一旦備份傳輸到了電腦,就可以刪除服務器上的備份記錄。
如果你不知道自己的網站根目錄,可以在cPanel賬戶中找到該信息:
上圖中我們可以看到該網站的根目錄是:/home/ma658tvk。
在Linux/Mac操作系統中,你可以使用mkdir命令創建目錄。例如:
該命令能夠幫你在/home/username/中創建“backup”目錄。
在該文件夾中,我們已經創建了4個子目錄:db、core、logs以及conf。
注意mkdir命令中的-p符號,該符號表示:在某目錄已經存在但仍然按需創建主目錄的情況下不會報錯。
將整個應用進行備份的工作非常關鍵,包括數據庫轉儲文件、核心文件、插件以及媒體文件。如果你想更加細節化一些,還可以對服務器配置文件及日志進行備份。在執行取證分析時,備份數據就更是尤為重要了。
導出數據庫
我之所以熱衷于使用命令行工具是因為在進行數據庫備份時都無需再用到其它附加工具。大多數的數據庫引擎都具備命令行功能,只需要拿到數據庫證書,整個過程簡單粗暴高效。
下面的命令將導出一個數據庫轉儲文件并將其放在:/home/username/backup/db/
如果你的網站采用的是MySQL,可運行以下命令:
若為PostgreSQL,則運行這個命令:
這些命令會用到用戶名密碼。輸入后(你的terminal中看不到這些字符)轉儲文件將存儲在事先準備好的backup文件夾中。
如果網站用的是SQLite,那么你只需要復制該文件即可:
創建網站文件的Tar文件
現在我們要做的是壓縮網站核心文件(為了方便起見)。在你的服務器上安裝tar程序,并確定核心文件以及其它你想備份或不備份文件的具體位置。
我們再次假設你的網站存儲在:/home/username/html。那么使用以下命令創建tar文件:
如果你想涵蓋/home/username/html中的所有文件,那么上面這個命令就非常好用。但如果你不想包含全部呢?
假設你的網站架構如下:
如果我們壓縮了整個目錄,那么緩存(cache)文件夾也會被備份。而緩存文件完全沒有必要備份,如果刪除這部分內容,可以節省很多時間、節約帶寬。但如果使用tar命令,我們可以通過-exclude這一標識將不需要備份的目錄排除。下面我們在排除緩存目錄的情況下對網站目錄進行再次壓縮:
另外,名為core.tar的voilà – a .tar文件會存儲在/home/username/backup/core/中。你也可以一直使用-exclude命令對你不需要備份的內容進行排除。
可選:對配置或日志文件進行備份
就個人經驗來說,我已經多次受益于配置和日志文件的備份了。比如,我已經很多次忘記我的“httpd.conf”長啥樣了,所以每次我都通過查電腦上的備份來解決這個難題。我是一個很懶的人,但請諒解——這個習慣常常能幫上大忙,日志文件也是。
配置文件和日志文件沒有通用位置,但你可以在tar命令中添加多個位置。例如:
第一行末尾的“\”符號表示按“Enter”鍵時,terminal不執行命令,而表示該命令含多行的意思。最后一行命令末尾不含“\”字符,表示terminal可以執行命令。這樣,你就可以創建一個包含你系統不同文件夾中的配置/日志文件的.tar文件了。
只要你在備份的服務器中安裝了正確的軟件,恢復配置文件只會讓你對配置文件進行復制。如果要在生產服務器中恢復配置文件,但軟件不同,恢復過程可能會發生很多錯誤。務必小心。
最終備份
創建最終的tar文件
到這里,我們已經把/home/username/backup/文件夾下所需的文件都準備好了,現在我們只需要創建.tar文件并把它下載到我們自己的電腦上即可。雖然我們也可以在不壓縮的情況下下載整個備份文件夾,但是我還是建議以單個壓縮文件的方式下載(更加保險、安全)。
該命令將創建一個名為“latest.backup.tar”的文件,包含所有的備份文件。在terminal中輸入“exit”就能斷開個人電腦與服務器的連接。
通過SCP下載文件
我們需要通過scp命令來下載latest.backup.tar這個文件:
該命令的作用就是從服務器上抓取該.tar文件,并將它下載到你電腦上“ /home/username/backups/domainname/”的文件夾,然后根據標準日期命令對該文件夾進行重命名(如backup_20170730_142422)。
從服務器中刪除備份
現在網站備份已經安全地躺在你的電腦里了,我們也就可以放心地刪除服務器上的備份記錄了。
首先,通過SSH重新登錄服務器,運行以下命令:
上面第一個命令的作用是刪除服務器上最后的tar文件,第二個命令用于幫助你從服務器遞歸地刪除備份文件夾。
警告!務必確保文件和文件夾路徑的準確性,因為要想恢復通過命令行刪除的東西非常困難,而且恢復難度也會隨著時間的增加而增加。一旦某文件被刪除,該文件的所有鏈接均被破壞,操作系統也會隨時釋放該文件所使用的的區塊。再次聲明:務必確認使用的路徑是正確的。
一旦你刪除了備份文件,就可以通過輸入exit退出服務器。
結論
整個網站備份過程完美完成!這不是一個完整的解決方案,但我想這是學習信息安全領域中備份技術的一個良好開端。