從刪資料庫到跑路 - 論備份的重要性

這其實是前陣子發生的事情了,那時候就覺得要紀錄一下,不過拖到現在才有時間寫 XD

前陣子,在某台伺服器上線網站,但是因為伺服器不明原因,可能沒辦法開機了,由於這台伺服器是多人再用,所以在我不知情的情況下就被重灌了,當下聽到根本哭哭,因為資料庫的資料完全被洗掉了。

聽到這件事情,總和以下幾件事情須注意

多人共用

伺服器這東西嘛,當然最理想的狀況,是一個系統用一台,而不是在一台上面佈署多個系統,但是現實由於經費,加上是學生也未必有多個主機可以用。

這時候就須要考慮:

  • 權限控制

    通常掌管 Database 的,理論上他要有最高的權限,而不是其他人非掌管資料庫卻有權限直接存取資料庫,不論是 CRUD 哪個動作,都是不允許的。所以,存取資料庫的帳號密碼是一種保障的方式,當然此帳密也是不能夠輕易外流的。

    通常業界會使用的伺服器都是 Linux,而 Linux 最高權限使用,都會需要輸入密碼,所以可以有一定程度保護伺服器,例如,最常聽到的笑話就是:

    1
    rm -rf /

    如果你是 root 權限,並且又執行這個指令就會刪除整個根目錄以下的所有檔案與目錄,也就是把整個系統都刪除了。然後你就可以跑路了…

  • 協調資料庫放的資料存在哪

    多人共用的話,假設多個系統使用的資料庫不一樣倒也還好,因為通常資料會存在安裝資料庫的路徑下,但如果使用同時同一個資料庫,那麼可能就要協調每個系統所放的資料路徑為何。

備份很重要,不做嗎?

備份這件事情對於資料庫來說真的真的真的非常重要,如果你上線一個系統,給使用者使用,你卻沒有做備份這件事情,這是一件非常蠢的一件事情,講白了是很低能。

回到前面,再重灌之前,雖然我有做備份的工作,我是每天晚上做備份,將資料多 copy 到硬碟上,但是重灌的時候把硬碟都洗乾淨了,所以備份的資料也就跟著沒了。

從那時候,我才覺得,哇靠,備份不是這樣備份的,因為你要想像如果你的伺服器整台硬體都壞掉怎辦?

  • 備份到雲端

    這個相信是最多人採用的選擇,雲端提供的公司有很多,任選一種即可,當然你說雲端公司有沒有可能會有誤刪你資料的那天?

    有,但是相信機率不高,而且通常選擇有名的公司,例如 Google,是有一定的品質的,不然就不會有那麼多人都願意選擇 Google Drive 放資料了。

  • 備份到另外一台主機的硬碟

    這很簡單,再多選擇一台主機,將資料備份到這台主機硬碟上,或是也可以拿那種外接硬碟也可以。

總之,以上兩件事情如果都並行,那當然是最理想的。

而備份的方式要怎麼啟動呢?

  1. 寫 script 進行自動化備份 (沒有人在那邊手動備份會死的)
  2. 設定那些時間進行自動化備份

就我的方式是:

  • 如果是 Windows

    寫好.bat 檔案,然後設定好排程任務,固定每天哪個時間去執行.bat 檔案進行備份的動作

  • 如果是 Linux

    就是寫 crontab,一樣設定好時間並定時去做備份的動作

備份並不難,只是要熟悉一下不同作業系統的設定方式,當然最好要會寫那個作業系統的 script 檔案,當然其實也可以用一般的程式語言去撰寫,但其實很多餘,其實作業系統的 script 有些還滿強大的,但當然不常用就很容易忘記~有機會我也是要做個筆記了。

好 Docker 一鍵部署不做嗎?

這個算是多講的,但自從這件事情被重灌後,除了資料庫的資料沒了,更重要的是系統的所需要環境要重新建立,這是一件非常非常非常麻煩的一件事情,從那之後我體悟到,任何系統我一定要用 docker 去做一鍵部署的設定。

一鍵部署到底多香呢?

  1. 在你想要的伺服器裡面裝 Docker

    這邊特別注意,絕對絕對不裝 Windows,因為就算你用 Docker 架好了,也不能夠外連,因為 Windows 他的 Docker 環境是虛擬機去做的。當然我不知道有甚麼辦法可以設定成功,總之我試了很久都沒成功。

    所以建議伺服器環境一定要 Linux,不管是你架在雲端平台好了,清一色選擇的作業系統都是 Linux,業界架系統大多也是 Linux,沒有人在跟你 Windows 的,有啦… 還是有,但是我真的覺得 Windows Server 很爛。

  2. 寫好 docker-compose.yaml 設定檔

    這個設定檔可以寫好你系統所需要的環境,幫你在 docker 環境架設好 container,例如你需要甚麼語言環境,資料庫環境、網頁伺服器等等,只要在這個設定檔寫好即可。

  3. 執行以下指令

    1
    docker-compose up -d

    一鍵部署加背後運行。

恩… 然後你就不用做任何事情了,就架好了。

總結

其實很多學校上資料庫其實不會講到這些事情,但是備份的重要性其實應該是每個工程師的常識,不然就會被別人認為是非常沒有 sense 的。

很多東西在學校學不到,你需要自己上架系統,你才會去考慮很多事情,我也是透過去學習來的。

最後提醒大家,如果未來去外面公司工作,刪除掉資料庫,並且又沒有備份到的話,後果不堪設想,從刪資料庫到跑路不是說假的,更可能賠上大筆金額。

共勉之~

最後最後!請聽我一言!

如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!