從 MS-SQL 到 MySQL – 第一天

Posted by Eric... On 2012年2月22日 星期三 0 意見

誰需要參考此篇 post? 如果你剛好是以下三者之一,歡迎你,相信此篇對你一定有幫助。

  • MySQL 初學者,想學習 MySQL 有關知識的朋友 
  • 碰到公司內部要求將 DB 由 MS-SQL 移轉到 MySQL的朋友
  • 評估 MS-SQL 移轉到 MySQL 可行性及難度的朋友

案情說明:
Godaddy 網路商所提供的 MS-SQL 只有 200MB 的檔案空間,目前已使用約 190MB,預估於一個月內到達限制,造成網站無法運作。

Action:
Godaddy 除了 MS-SQL 外仍有提供 MySQL 1GB 的空間,雖然相關人員未接觸過 MySQL,經評估可將資料庫移轉到新的 MySQL,雖有語法上的差異,但程式可配合修改。

Schedule:
預估三個工作日

 

第一日: 沒有截止日期的工作,不要期待有結果

首先,很快的第一天的工作就要開始了,別忘了 PM 的工作就是要盯住下面的同事再加上 PDCA,Plan – Do – Check – Action 。不過,老規矩施工前先來抱怨一下,為何每次處理的問題都是大家早就知道,但賴皮愛拖的等到最後一週或剩下幾天才處理,想搞不好事情拖久了,你忘了,我忘了,大家都忘了,最後大家 happy 嗎?但總是事與願違,問題是紙包不住火的?像這個 case 算是拖了三個月,才認命開始動手解決。所以我為這個案子定了一個平常不過的完工時間,三天。

對,就只有三天要搞定它,因為 "沒有截止日期的工作,不要期待有結果"

這是件單兵作戰的案子,沒有 team 成員和我同甘共苦,不過身於資訊專業人員,工作雖然不多但總是要計劃一下,來來來…安排一下這三天的進度,這次可是 PM,DBA,還有 Programmer 自己全包,包山包海就是沒包下午茶,說到下午茶,真是令人懷念。

第一日計劃

  • 程式 & DB備份
  • MySQL 安裝
  • 建立測試環境
  • 開 Table, 建 index 再 import data

第二日計劃

  • 網頁程式修改
  • 網頁單元測試

第三日計劃

  • 資料庫轉檔程式修改
  • 整合測試
  • 新網頁發佈
  • 系統監視及修正

 

各位朋友,一切都會好轉的,只要啟程了,目的地就不遠了。

第一天的工作中,程式 & DB 備份為何要列為首件呢?因為我見過一些令人悲傷的 IT 慘劇,所以只要我執行或是參與的案子,第一件事就是備份,備份永遠不會嫌多。不過,因為各家系統都不同,請自行執行這個第一天的第一步驟,唯一要小心的就是不要把 export DB 作成 import DB,當然,這也是我看過的 IT 杯具之一。

接下來是 MySQL 安裝、建立測試環境,最後開立 Table,  index 再作 data import 作為第一天的結束。

MySQL 安裝

以下提供 MySQL 的連結,請自行下載後逐步安裝即可,並再安裝 MySQL Workbench CE 5.2,此工具類似於 MS-SQL 的 SQL Server Management Studio,但二者比較,相關功能陽春多了,不過我們還是可以利用內建的工具進行今天預定要作的 SQL 查詢及 import data。

在MySQL 安裝的過程會產生一個內建的 DB,請將使用者名稱及密碼記下,以利後面的建立測試及 data import。

MySQL DB 下載連結: http://dev.mysql.com/downloads/
MySQL Workbench CE 下載連結: http://www.mysql.com/products/workbench/

image
MySQL Workbench CE 執行畫面

建立測試環境

當進入 MySQL Workbench 後,直接開啟一個 connection 進入 MySQL,此時你就可以試開個測試 table 當作首次練習。

image 
MySQL Workbench CE 執行 Query Database 畫面

但如果不知道從何開始的朋友,那就參考以下範例熱身一下。相信原本熟悉 MS-SQL 的朋友看到下面這二段 SQL 指令,應該可以輕易的分辨出差異吧。原本 My-SQL 的 select top 10 * from eps 變成了 select * from eps limit 10。還有 [table name] 變成了 `table name`,這個我們少用的符號 –> `。再提供一個查詢目前時間的 SQL 語法, select sysdate() 在 MySQL 則是 select Now() 。

imageMySQL Workbench CE 執行 Query 範例

開 Table, 建 index 再 import data

接下來我們開始建立更完整的測試環境,在開 Table 項目,有關 MySQL 和 MS-SQL 差異的地方,我們可以直接使用下面 5 個步驟作轉換時的參考,這是我實際執行時所作的隨手記錄。再來開好 Table 之後是建 index,我建議可以使用 MySQL Workbench 圖形化界面操作比較直覺也快速,此處就不另加說明。

  1. 移除 "[dbo]"
  2. 移除 "[" and "]"
  3. 更改 nvarchar 為 varchar
  4. 更改 numeric 型別為 integer
  5. 更改 identity 為 auto_inrement 並加上 primary_key 參數
  6. Unix 版本的 MySQL table 有大小寫區分,為避免困擾,建議 table 名稱一筆為小寫

imageMS-SQL 開 Table 圖示

今天最後的一個步驟是 import data,利用 MS-SQL 的 SQL Server Management Studio 協助將 table 資料轉為文字檔 (Flat-file) ,再經由 MySQL Workbench import 進指定的 table,過程皆為圖形化界面,此處也不再詳述。

溫馨提示: 在 table 的 export / import 過程中,記錄各個 table 的資料筆數作為前後的結果驗證,力求資料一致。

自動編號在 import data 時會是你的另一個問題,當我於 MySQL 開新 Table 時,原始設定都不先行啟動自動編號,待完成 import 後再將 ID 欄位修改為自動編號,這種作法可以控制 ID 編號為來源及目的一致。以下有二段有關比較重要的自動編號 SQL 指令給各位參考。

    • 修改 table 某欄位為自動編號
      ALTER TABLE `table name` CHANGE `欄位` `欄位` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
    • 修改欄位自動編號的開始數字
      ALTER TABLE `db name`.`table name` AUTO_INCREMENT = 某數字;

imageSQL Server Management Studio

註: 在資料庫管理工具方面,我個人有使用另一套 Aqua data studio 4.7 (個人免費使用) ,值得推薦。原因為此軟體可以橫跨 MS-SQL/MySQL/Oracle ,多種資料庫皆可使用,我使用起來相當的順手,使用方式也是將 MS-SQL table 匯出為以逗號分隔的 .txt 文字檔,再匯入 MySQL。

0 意見:

張貼留言