Azure database for MySQL 建置

當科技發展到雲端時代,企業之間的激烈競爭並沒有停下來,只是改成比較誰可以把 Paas或是Saas 用的更好,才能實現其科技上的競爭優勢。以開源資料庫MySQL來看,微軟在雲端上一直致力於提供使用者更好的雲端服務,從最早期的 Iaas VM,到 Marketpalce 上面眾多的第三方的 MySQL服務,再到目前的 Paas層級的 Azure database for MySQL服務。本篇將著眼於後者,介紹如何建置這個微軟維運的 Paas服務…

本文將會以四個議題(概念、限制、如何設定、如何存取)跟大家介紹 Azure database for MySQL:

  1. 什麼是 Azure database for MySQL?
    上圖是Azure上面關聯式資料庫的解決方案,其中也包含最受歡迎的 MySQL或是其兄弟 MariaDB。

    以下是官網中所摘要出來的優勢規格:
    A. 內建高可用性但沒有任何額外成本。
    B. 可預測的效能,使用預付型方案計價方式。
    C. 視需要在幾秒內進行縮放。

    **調整 Scale(不管是放大或是縮小)的時機儘可能要避開尖峰時段,最好是離峰時段計畫性的調整。因為內建 HA的緣故,所以 transcation restore會拖慢 Sync的時間,可能會有服務上的延遲
    D. 受到保護,可保護機密的靜止資料和移動中資料。
    Azure database for MySQL 在會將資料庫底層運行 Storage、以及備份時產生的檔案進行加密保護,以符合 FIPS 140-2的規範。另外在預設值,也會啟動SSL連線的安全性,將有助於抵禦"中間人"的攻擊,另外你還可以上傳憑證來完成自定義的加密機制。
    E. 最多 35 天的自動化備份和時間點還原。

    其備份策略為,七天一次 full backup,二天一次 diffential backup,五分鐘一次 transcation backup
    F. 企業級安全性與合規性。
    細節請參考微軟的信任中心
  2. Azure database for MySQL的限制
    A. 不支援主版本的更新(目前是5.6 &5.7),小版本(5.6.xxx)的更新微軟會幫你做。而且支援的版本是 N-2 (Windows only),若想使用官方不支援的版本只能自行 dump/restore
    B. 不支援 superuser權限與功能,所以你帳號需要取 root 以外的名字
    C. Restore 時是一個新的DB,包含名稱不能與之前相同(覆蓋),防火牆需要重新設定…
    D. 在這三種類別的規格中 Basic/General purpose <=> Memory optimize,受限於底層分別是使用 "一般Storage"與"Advanced Storage(SSD)",所以 Scale的升/降是不支援跨Storage,萬一遇到了只能用"匯出/入"來解決
    E. VNet endpoint 需要在General purpose以上才有支援
    F. 最高 6000 iops 

    **在2019/7 技術預覽的版本,已提升至20000 iops了
    G. 
    目前有提供二種複寫 Replication 機制,包含 Data in Replica 適合端要上雲的 migration應用情境;Read Replica 適合讀寫分離,最高支援 5個節點。其主要限制為,需要5.6版本以上而且節點之間的版本要相同另外,複寫不支援 system database 以及 GTID(Global Transcation idenfifiers)
  3. Azure database for MySQL建置
    由於我在一開始就提過 MySQL相關的產品或服務,在Azure 中有眾多廠商在提供服務,所以直接用 MySQL 這5個英文字可能會搜尋不到本篇我要介紹的。因此,請從左上角的 Create a resource開始,再點選 Database,就能找到 Azure database for MySQL
    接著請為當前的 MySQL 取一個名稱,在虛擬容器 Resource group中我 New了一個 mysql,若你已經有其他既有的 RG也可以直接套用。至於 Source它有空白以及從備份去還原二種,我先選空白 Blank。接著是存取所以的帳號/密碼
    在主版本,目前有5.6與5.7可以選擇,接著是重點價格,我選了一個 entry level的規格來示範。最後我們就可以按下 Create來建立,若是你有建立多台的需求,基礎於 ARM 模型你可以選擇 Automation options來產生 template,來實現可程式化的自動佈署。
    這個 ARM template 在本篇就不細談
    **另外,與價格高度相關的就是規格了,這個有三個類別,受限於先天上的限制請慎選
    至於Generation 4 &5,根據 Intel的資料第五代的效能比前一代提升30%,Azure於 2018年在全球不同的 Region陸續升級,所以在不同的區域可能會有不同的世代可以選(當然價格也不一樣),規格的細節可以參考官網的說明
    以上是Intel CPU近期三個世代的比較表

    大約數分鐘,服務就會被建置完成,你會需要一個 client端去連接它。在連接之前,你需要把防火牆打開,在 Portal中按下 Add client IP,就能自動偵測以方便設定。
    接著在切換至Overview頁面,準備好連線資訊

  4. 存取 Azure database for MySQL
    A. 以 Client端工具來看,MySQL Workbench是最適合的,請從它的官網 (這裡提供的是 for windows環境)去下載
    依照精靈指示,把它裝起來。
    Launch後,在歡迎頁找到+ new connection
    按下 Test connection
    Profile已建立好,可以來操作 MySQL的存取了
    新建 Database (在 MySQL叫 Schema) 內容 Content 的方式很多,我這邊示範一個執行 Script的方式
    從左上角去選到 Script 檔案
    接下來在編輯視窗中找到上方有一個閃電 Icon 來執行這一段 Script
    執行後,可以在左方的 Schema視窗中,按一下 refresh按鈕,就可以看到 classicmodels 資料庫,以及展開後的 table 甚至是 column
    以上是這個資料庫的 ER diagram

    B. Visual Studio Code
    當我們 Launch VS Code之後,可以在左下角 Extension 的輸入 mysql找到一些 MySQL相關的 management tool。在畫面中,我選了一個可存取多種關聯式資料庫的 Extension 然後就可以按下 Install開始安裝,
    相關的細節請參考市集的介紹
    接著回到最左上角的 Explorer

    C. 透過程式使用 Connetion string 來存取 MySQL
    當你從Azure portal中左邊的選單找到 Connection strings,系統很貼心地,讓你一切過來,就自動複製第一筆連線字串

     
  5. 補充一點,資料庫的管理面,你可以從 Azure portal來進行

**以目前的規格來看,在價格上比起 Iaas是有優勢的,只是太複雜的應用要上到 Azure,還需要再三思!
在上圖中比較了,建二個Iaas MySQL VM與一個 Pass Azure Database for MySQL的費用

李秉錡 Christian Lee
Once worked at Microsoft Taiwan