由於工作需要,系統原先的SQLServer數據庫要轉換成MYSQL數據庫,所以這兩天就一直在查閱這方面的資料。最開始,我嘗試從SQLServer中導出SQL文件,然后導入到MYSQL數據庫中,發現報錯,大概意思就是類型不對。后來發現一篇博文,感覺靠譜,一步一步實施下去發現導入是成功了,但是有問題,下面我先將博文內容呈現(轉載自:http://www.cnblogs.com/gaizai/p/3237907.html)
一、背景
由於項目開始時候使用的數據庫是SQL Server,后來把存儲的數據庫調整為MySQL,所以需要把SQL Server的數據轉移到MySQL;由於涉及的表比較多,所以想在MySQL中生成對應表並導入數據;
上網找了些資料,如:將ACCESS和MSSQL導入MYSQL中、MySQL Migration 實現 MSSQL 到 MySQL數據遷移,雖然不知道里面的做法是否可以成功轉移,但是里面的過程比較復雜,沒有去嘗試,后來自己找到了方法,最重要就是簡單和准確(暫時沒發現明顯的BUG),這里分享給大家。
二、轉移數據
我使用了MySQL的Client的工具SQLyog,這個工具的安裝很簡單。安裝完成之后點擊需要導入的目標數據庫,點擊右鍵【Import】->【Import Extenal Data】;
(Figure1:Import)
選擇【Start a new job】,點擊【下一步】;
(Figure2:Start a new job)
下面就是DSN的設置界面,如果你的下來列表中沒有需要導出SQL Server數據庫的DSN,那么需要通過【Create a New DSN】來創建一個新的DSN連接到SQL Sever;
(Figure3:Create a New DSN)
(Figure4:創建新數據源)
(Figure5:選擇數據源類型)
把上面的設置保存為一個local.dsn文件;
(Figure6:選擇數據源保存路徑)
(Figure7:選擇SQL Server服務器)
(Figure8:設置SQL Server帳號和密碼)
(Figure9:選擇SQL Server數據庫)
(Figure10:測試數據源)
(Figure11:測試成功)
選中【File DSN】,在瀏覽中選擇我們剛剛創建好的DSN,接着填寫登錄到SQL Server的帳號和密碼;
(Figure12:選擇DSN)
下一步,選擇目標MySQL服務器,填寫IP地址和帳號密碼,並且需要選擇目標數據庫;
(Figure13:設置MySQL帳號和密碼目標數據庫)
這一步類似SQL Server的導入導出功能,這里可以拷貝一個表或者使用SQL腳本過濾數據;
(Figure14:表拷貝)
上面的全部過程就是為創建SQL Server與MySQL的一個管道,接下來就是最為重要的設置SQL Server表與MySQL表之間的對應關系了;里面包括了SQL Server表字段與MySQL表字段之間的對應關系【Map】,高級選項【Advanced】,過濾【WHERE】。
(Figure15:選擇表對應關系)
下圖Figure16,數據源【Source】,描述【Destination】,特別注意這里數據類型【Type】,這里的意思是轉換目標的數據類型,但是不需要跟目標表的一樣,因為這里是做為一個臨時存儲的數據類型,類似FindOn在SQL Server中是datetime,這里轉換為MySQL的timestamp,其實MySQL目標表的數據類型是datetime,這樣的設置也是可以轉換成功的。
(Figure16:表字段轉換)
(Figure17:高級選項)
(Figure18:Error)
(Figure19:Log)
(Figure20:執行信息)
(Figure21:執行結果)
(Figure22:原始SQL Server的數據列表)
(Figure23:轉移到MySQL的數據列表)
對比下Figure20與Figure21,發現我們數據已經全部轉移成功了;
以上是“聽風吹雨”的博文。參照這個博文,我這邊出現兩個問題,一個是導入的數據表遠遠超過實際的表;第二個是有些數據表沒有導入成功。在仔細閱讀sqlLog出錯日志文件(自己選的Log file的目錄下),發現有個別數據表字段類型不對,導致導入不成功,基本上是datetime字段類型,博文中提到說(特別注意這里數據類型【Type】,這里的意思是轉換目標的數據類型,但是不需要跟目標表的一樣,因為這里是做為一個臨時存儲的數據類型,類似FindOn在SQL Server中是datetime,這里轉換為MySQL的timestamp,其實MySQL目標表的數據類型是datetime,這樣的設置也是可以轉換成功的),但是我這里轉換不成功,而后我就將所有timestamp類型的都手動改成了datetime類型。導入成功,第二個問題解決。
至於第一個問題,我發現,導入的那些表全是原先SQLServer數據庫中的視圖。所以在再次導入的時候,我只選擇了自己需要的數據庫表,切記全選要慎重。
(謹以此記錄下,以備以后查找。我的SQLServer數據庫版本為SQLServer2005,mysql服務器版本為5.5)