把 WordPress 的資料庫移到 Amazon RDS

分享這篇文章

前幾天收到了一封信,是這次三月搬家的新空間寄來的信。看到之後大吃一驚!

意思就是通知我,我有個資料庫大於空間 Plan 的上限 750MB,希望能夠在7天之內降低這個資料庫大小。而那個資料庫的大小是:1.6Govo||

什麼?為什麼會有資料這麼大!?我大驚,一查發現那個資料庫是放朋友們的 WordPress,最近新增的是個私人用的倉庫Blog,裡面放了太多的文字資料,加上又是積累十年的成果,整個暴增!

我自己這一整個blog的資料庫才也大約60MB,超驚人!其實信寄來是 25日,我到31日的時候才發現,時間忽然很緊急! 8-O  得想辦法去解決這個事情。我查看了一下 SiteGround 往上一級的 Plan 的資料庫限制,也只有 1G 大小,實在是不夠。

平心而論,我現在買的是 20GB 空間,無限個資料庫,一個月流量25,000,可以設定無限個網站的空間,加上資料庫上限是 750 MB,基本上除非例外,否則是非常足夠了。

SiteGround 的空間方案

但現在就是例外XDDDD  看來往上一層升級不可行(另外也是金額會變成現在的兩倍,太貴了)那就只能看看有沒有網路有提供單獨資料庫可接的。通常 MySQL 只會附加在空間中,但拜現在雲端科技發達,查了一陣子,我決定來試試看 Amazon RDS

AWS 介紹

Amazon Web Service 服務
Amazon Web Services 提供各式各樣的全球雲端產品,包含運算、儲存、資料庫、分析、網路、行動、開發人員工具、管理工具、IoT、安全和企業應用程式。這些服務能協助組織更快速地運作、降低 IT 成本及擴展。最大型的企業和最熱門的新創公司都信任 AWS 為各種工作負載提供技術支援,包括:Web 和行動應用程式、遊戲開發、資料處理和倉儲、儲存、存檔等等。

上面這段是從 Amazon 那邊複製來的資訊,但因為真的太多了無法列出,請大家可以利用連結去看看有沒有適合自己的服務。稍微列一下我比較在意的一些事情:

註冊服務費用區域選擇教學

誰都可以註冊,註冊流程可以參考這篇文章

因為服務中有一些會需要費用,所以會需要輸入信用卡資訊,並且會收到一美元左右的刷卡簡訊。不過這金額只是要確認信用卡是否可用,並不會真的扣掉。

參考文章說帳號通過可能會到24小時,不過我大概幾分鐘就通過了。

基本上帳號註冊之後,大部分的服務就會有一年的免費基本期。所以如果想要利用免費期間,不要太早註冊,需要的時候再註冊即可。

有些服務只有一年的免費期,有些則是永遠免費,可以從這篇文章去找一找你需要的服務是哪一種。

Amazon 也有提供費用的計算機,可以讓你概估計算會有怎樣的費用產生(只有一年免費期的也會提醒你)

Amazon 在全球很多地方都架設有伺服器提供這些服務,可以在Amazon 首頁下方或是這個頁面看到詳細

這個選擇很重要,你要選擇服務的時候建議先選擇好地點,然後才去選擇你所要的服務建置

每一個地區都可以設定同樣的服務,所以也是可以試驗看看每一個地點的速度差別。

我這次測試了東京美國加州北部新加坡,最後決定在新加坡(因為我SiteGround選的也是新加坡的伺服器,所以速度是最快的)

Amazon 的教學文件非常的多而且完整,其實有很詳細的如何建立跟使用的教學,請參考這個頁面

我也是靠這份文件完成的,不過有一點其他的要點,下面的說明會再註明。

 

選擇RDS

Amazon 的雲端服務有很多種,有含網頁空間或是儲存空間等等的,我需要的是「資料庫」的部份。

我看了分類說明之後選擇 RDS(Amazon Relational Database Service),雖然這個需要費用(註冊開始一年免費),但比Amazon Aurora所需要的費用少(無免費方案,可用MySQL跟PostgreSQL,方案提供的效率更快速)。如果可以使用NoSQL資料庫的話,可以用Amazon DynamoDB這個方案,這是永遠免費。可惜 WordPress 只使用 MySQL。

而 RDS 可以選擇基本一年免費的資料庫系統有:PostgreSQL、MySQL、MariaDB、Oracle Database 和 SQL Server。

啟用RDS、建立Database

從上面工作列的「服務」選擇到「RDS」
接著可以從Dashboard頁面右邊按下「Create Database」

第一個會先出現選擇資料庫系統,因為要給Wordpress用的,所以選擇 MySQL。

然後在按「Next」之前,可以先按旁邊的「Only enable options eligible for RDS Free Usage Tier」,在下一步選擇資訊的時候可以只列出符合免費方案的選項,避免選到會多出費用的。

進入下一步之後,大部分選擇都可以不用動,使用預設的就好,然後填好下方這個表格

DB instance identifier:這個是一個標識,有點像是識別一個資料庫專案的名稱。
Master username:資料庫登入的名稱
Master password:登入密碼
上面這兩個在登入資料庫跟設定 WordPress 的時候都需要使用到

下一步則是資料庫的規格設定,基本上也是按照預設的即可。但因為我們後續需要用外部連接到資料庫(資料庫軟體跟Wordpress設定),所以下面這個設定要設成「Public」

接著就可以按下方的「Create Database」建立資料庫了。

我們可以回到「服務」→「RDS」→左邊的「Databases」,可以看到右邊會列出我們剛剛設定的資料庫identifier,我們需要連接的資訊,所以請點進去查看資訊。

下載標準SQL用戶端程式

基本上建立 Database 需要一點時間,才會出現我們所需要的連結資訊,時間不定,大概5~10分鐘不等。這段時間我們可以下載 SQL 的連接軟體。Amazon RDS 並不像一般空間有 phpmyadmin 這樣的網頁頁面,要使用標準 SQL 用戶端連接上。這個頁面上也有提供這種軟體的下載頁面(下載 MySQL Workbench),也有支援 Mac,下載需要註冊,大概下載完安裝好,我們就可以回到剛剛的頁面去取得我們要的資訊了。

用戶端程式連接資料庫

回到剛剛的頁面,可以在下方取得到重要的連線資訊 EndPoint。

這個就是我們需要填的資訊,到安裝好的 MySQLWorkbench,建立一個新的連線。

Hostname:請填頁面上的「Endpoint」,對,就是那長長一串
Port:3306 預設值即可
Username:請填建立的時候填的「Master username」
Password:同樣請填建立的時候填的「Master password」

填好了,可以利用下面的「Test Connection」來測試連線能不能成功。

用戶端程式連接資料庫─解決無法連線

按下測試之後,會發現連線了一段時間卻出現無法連線的資訊。為什麼呢?我們回到資訊頁面,往下拉可以看到這個資訊:

Type部份的 Inbound 就是連入,Outbound的部份是輸出。我們可以看到輸出的部份是 0.0.0.0/0 ,代表的是他可以傳出到任何一個地方。而 Inbound 的 Rule 則是一串 IP ,這是限定只能從這個 IP 的連線才能登入這個資料庫,以安全性上來說是最好的選擇。

但我們從自己電腦或是後續要設定的 WordPress 都不會是這個IP,限制這樣那就無法使用了,所以我們點 Inbound 前面的 Security group 名稱去做修改。

進去之後點選上方的「Actions」,選擇 Edit inbound rules。

把中間的「Source」改成「Anywhere」,這樣就能讓資料庫提供外點連線了!

當然改天連網頁空間都要移動到 Amazon 的服務的話,這邊還可以改回 IP 限定。

改完之後再回到 SQL 的用戶端程式,連線就可以成功了!接下來就是一般 SQL用戶端使用方法,建立別的資料庫啊或是匯入資料或是建立資料表就都可以成功了。

如果你就只是搬移WordPress的資料庫,建議事先在自己空間架起來,然後到自己空間的 phpmyadmin 去匯出整個 WordPress 的資料庫,然後在連上 Amazon 資料庫後,自己進行匯入的動作即可(兩邊都設定一樣名稱的資料庫會更快)

我沒試過一開始建立 WordPress 就填 Amazon RDS 資訊能不能成功,或許可以吧!XD

修改 WordPress 的連線資訊

資料庫匯好之後,等於前置作業準備好了。(以我的狀況,我光匯入資料庫就得花上45分鐘,所以測試了三個地區的速度真的花了我一整個晚上)

接下來就是改 WordPress 的資訊了。在建立好 WordPress 之後,在該資料夾下會有一個 wp-config.php 檔案,裡面記載的是最重要的資料庫連線資料,我們要修改的就是這個資訊

// ** MySQL 設定 – 您可以從主機服務提供商獲取相關資訊。 ** //
/** WordPress 的資料庫名稱,請更改 “database_name_here” */
define(‘DB_NAME’, ‘database_name_here’);  ← database_name_here 請改成你設定的資料庫名稱

/** MySQL 資料庫使用者名稱,請更改 “username_here” */
define(‘DB_USER’, ‘username_here’); ← username_here 請改成你登入的名稱

/** MySQL 資料庫密碼,請更改 “password_here” */
define(‘DB_PASSWORD’, ‘password_here’); ← password_here 請改成你登入的密碼

/** MySQL 主機位址 */
define(‘DB_HOST’, ‘localhost’); ← localhost 請改成你Amazon RDS 資料庫的 EndPoint

/** 建立資料表時預設的文字編碼 */
define(‘DB_CHARSET’, ‘utf8’);  ← 不要忘了資料庫要改成這個編碼(這邊不用修改)

/** 資料庫對照型態。如果不確定請勿更改。 */
define(‘DB_COLLATE’, ‘utf8_unicode_ci’);  ← 不要忘了資料庫要改成這個對照型態(這邊不用修改)

存好上傳之後,就可以試試看你的 WordPress 能不能讀到資料庫了。

在進行這個動作的時候,我昨天遇到幾個問題:

  1. 直接顯示讀取資料庫有問題:檢查 EndPoint 等等資訊都沒錯,後來發現是資料庫的文字編碼跟對照型態不對(預設是 latin 語系),使用SQL用戶端去把資料庫的資訊改掉之後就好了!
  2. 連線過久:我一開始使用的是「東京」,結果連上了,但慘不忍睹,顯示一個頁面大概要 30 秒,要是我都不會想要去這個網站了。後來想我用的是美國的空間,那我來試驗「美國西部(加州北部)」,重新進行了上面那堆步驟,但時間上還是一樣。然後我才想起來,我在租用 SiteGround 的時候就特地選了「新加坡」的機房(畢竟我寫中文對象就是亞洲地區),於是再把所有步驟在Amazon「新加坡」重複一次,這次試驗就快超多!跟原本我放在空間的速度快幾乎一樣了!

結論(?)

AWS 真的是一個很好的服務,雖然已經知道 Amazon 雲端很出名,但直到我因為這次資料庫的問題找上它,才發現它提供的服務真的很多,有些還真的是免費,或至少一年免費(光試用就夠你決定要不要繼續了)。

接下來就是看這幾個月有沒有報表可以讓我看看如果免費期過了會需要多少費用,如果不多,那說不定就會把這區塊在這邊活下去,我其他的資料則繼續使用 SiteGround 的資料庫。如果會很多就……我再跟朋友商量!XD

這篇寫很久,但好像沒寫什麼太多新的東西,算給自己一個記錄,下一次(說不定明年)可以拿來恢復記憶!

 

除了上述 Amazon 文件外參考的文章:

架WORDPRESS ON AMAZON COULD遇到的問題

如果你覺得這篇文章還不錯,請您花點時間註冊並幫按下方的Like。支持創作,正向交流:)
回饋由 (likecoin)基金會出資,關於註冊您可參考這篇文章參考新手村文章

分享這篇文章

寫點留言吧!

avatar
1000