aws 提供了rds這樣傳統的關系型資料庫,也提供了dynamodb這樣的nosql 資料庫。那麼問題來了,如何把現有的資料庫遷移到aws上呢?
當然,資料庫本身就提供了備份和還原的功能,我們完全可以手動拷貝備份到對應的伺服器上然後進行還原的操作。這種操作對于相同平台的資料庫來說還是比較友善的,但是如果涉及到不同的資料庫平台,那就比較麻煩了。
aws本身就提供了一個資料庫遷移的服務,叫做 database migration service ( dms)。 通過這個服務,我們可以實作同類型遷移 (homogenous migration),例如 oracle 到 oracle,或者混雜遷移(heterogeneous migration) ,比如 oracle 到 ms sql。對于混雜遷移來說,我們需要使用 schema converter tool (sct)對 schema進行 轉換才能遷移。
下面看一個簡單的demo,如何把一個現有的microsoft sql 資料庫轉換到aws的 aurora 資料庫。
豆子打算建立一個rds的 mssql 資料庫,一個 rds的 aurora 資料庫。在mssql上我會建立一些樣本資料,然後通過 sct 進行 schema 轉換,最後通過 dms 進行資料庫的同步進行遷移。值得一提的是,dms支援從 rds到rds, ec2 到 rds 甚至 本地資料庫 到 rds 的各種轉換。
下面看看具體操作。在操作過程中,豆子因為實驗環境的緣故,遇見了一些坑,會盡量列出來,避免再次發生。
進入 aws rds 控制界面
建立一個 mssql 資料庫,注意我選擇的類型是 sql server standard edition。很不幸的是,dms不支援 express版本的遷移。
輸入資料庫instance的名字和密碼
測試的伺服器不需要太好,最便宜的就行
選擇vpc (這裡有個坑稍後我會提到)
重點,注意看他的價格,一個月要768 美元!!
這個是通過下面的價格算出來的。新手做這個實驗大概要2個小時,兩台伺服器大概開支會在5刀左右,是以做完了實驗一定要記得删除自己的資料庫!!
資料庫建立中
我順便建立了一個安全組,允許我自己的機器通路1433和3306端口 。(目前為止沒問題,但是這是第二個坑,後面會有問題)
重複上面的操作步驟,我又建立了一個 aurara的資料庫,他會自動建立一個cluster,然後把你建立的成員放在裡面(即使隻有一個)
最後我的兩個rds的instance就建立好了。demo1 是 mssql,做為我的資料庫源,demo2是aurora,作為資料庫目标
建立好了資料庫以後,我還需要生成一些測試用的table和資料。 下面看看如何從本機連接配接資料庫。
首先看看 mssql的 endpoint
在我的本地電腦上通過mssql management 工具連接配接。理論上,這一步應該很簡單,如果我的安全組政策正确的話。這裡我遇見了第一個坑。我的賬号裡面有多個vpc的網絡,而我的本地網絡和aws 某一個vpc之間已經存在了 s2s v-p-n 的連接配接,因而aws會認為我的計算機屬于内網,他很智能地把他的域名解析為内部ip。事實上,我的計算機和這個測試的vpc的網絡之間并沒有路由,也沒有配置gateway,内網通路是不通的,盡管他有一個公網ip,但是aws自動給我解析為内網ip之後,我的路由會找不到對應的路徑導緻我始終無法通路。最後我隻能重建rds,然後確定他在的vpc和我的計算機網絡之間存在了s2s連接配接關系。
連接配接之後,執行我的測試sql腳本,他會建立一堆表,并插入一些測試資料
下一步我們需要在我的電腦上安裝 sct 工具。
在下面的連接配接上下載下傳sci,mssql 的 jdbc 以及 mysql的 jdbc
https://docs.aws.amazon.com/schemaconversiontool/latest/userguide/chap_installing.html
然後打開sct,選擇建立一個項目
分别連接配接 mssql 和 aurora
連接配接成功
勾選我們要遷移的資料庫,之後在action 選擇 create report
他會掃描你的 mssql 資料庫進行評估是否可以轉換。
下面是生成的報告
如果報告沒有問題,下一步就是進行schema的轉換了, 選擇 action- convert schema
幾秒之後 可以看見schema已經在aurora這邊生成了
最後一大塊的操作是配置dms。 登入aws 控制台 , 選擇 database migration service。這個服務裡面,我需要建立三個東西:
一個用來同步的instance,類似ec2執行個體,但是它是由aws來管理的
建立source endpoint和 destination endpoint
建立一個任務來同步。
首先來建立一個 replication instance ( 同步執行個體)
注意他所選擇的vpc secuirty group 是我之前建立的,這裡其實是有問題的
建立完成之後 我們來繼續建立endpoint。
endpoint 建立完之後一定要測試 connection。
建立之後的樣子
建立好了之後來測試一下,不通!!
我在這裡卡了至少1個小時。最後發現有3個坑在這裡。
首先,我之前配置這個sg的時候,隻允許了我本地的機器通路,我的dms的伺服器是不行的,是以這裡我們需要把這個dms的内網ip也加進去;
第二:sg的outbound rule預設是所有都打開的,我無意中進行了限制,是以需要确認outbound rule是放行的
第三:我有一個nacl在這個公網subnet上,是以我還得在nacl上面放行
擷取dms 同步伺服器的ip
修改安全組的出入規則
修改我的nacl的出入規則
再測試一下連接配接成功
最後,我們來建立一個任務進行同步
添加一個 selection rule
等待2 分鐘之後 進度條顯示成功
mssql management 工具 連接配接我的源資料庫, 進入查詢一下資料
mysql workbench 連接配接進入我的目标資料庫,查詢一下 資料一緻,遷移成功!
再次友情提醒,實驗成功了記得删掉伺服器,aws的收費還是很貴的。