資料庫轉換日記---從MSSQL Server導數據到MySQL

来源:https://www.cnblogs.com/88223100/archive/2023/03/16/Import-data-from-MSSQLServer-to-MySQL.html
-Advertisement-
Play Games

近期將ERP後臺從MSSQL SERVER過渡到了MYSQL,確實經歷了一番波折,轉換過程雖然極其痛苦,這裡也不賣慘了。將過程記錄一下,有人願意的話共同學習。 前面分享過操作系統和資料庫的安裝,倒是沒啥需要註意的地方,前面說的極其痛苦,是從數據導完開始的,暫時還體會不到,本篇介紹一下如何將... ...


前言

    近期將ERP後臺從MSSQL SERVER過渡到了MYSQL,確實經歷了一番波折,轉換過程雖然極其痛苦,這裡也不賣慘了。將過程記錄一下,有人願意的話共同學習。

    前面分享過操作系統和資料庫的安裝,倒是沒啥需要註意的地方,前面說的極其痛苦,是從數據導完開始的,暫時還體會不到,本篇介紹一下如何將數據從MSSQL SERVER導出到MySQL資料庫。

極其重要

如果各位由相同訴求,一定要先做測試,不可在生產環境直接幹活,這點特別重要!

 

沒有測試成功前不可在生產環境直接幹活!

 

沒有測試成功前不可在生產環境直接幹活!!

 

沒有測試成功前不可在生產環境直接幹活!!!

 

測試環境搭建就不太多介紹了吧,也就是將源資料庫做個備份,找台機器裝個相同資料庫,將備份數據導進去,這個新導進去的庫,跟源庫最大的區別是兩個,也是我們最關註的兩個:

1、數據弄壞了不影響生產系統;

2、資料庫沒有應用對其有讀寫操作。

 

如果生產環境想要數據導過來,最好的辦法是說服領導不要這麼乾。說服不了的話,至少要多次測試,將碰到的問題,解決的方法全部記錄在案,評估通過再停機幹活!

 

以下包括後面的文章,都是針對測試環境的介紹,小編也是多次測試才敢動ERP系統後臺的。

源數據分析

首先得瞭解一下遷移目標。我的ERP,經過了5年半的使用,現有數據表188個,記錄條數1033483條,全部都是文本記錄,沒有文件、圖形等記錄。

圖片

打開Microsoft SQL Server Management Studio客戶端工具,連接到MSSQL資料庫後,可以通過資料庫的系統視圖裡面查到數據表個數和每個數據表的記錄條數。通過新建查詢輸入下麵的命令就可以拿到了。

SELECT a.name,b.rows FROM  sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE a.xtype='U' AND b.indid=1 order by a.name

幹活之前,可以將這個記錄先複製到EXCEL裡面,用作記錄,等遷移完成後,核對MySQL資料庫裡面的數據表和記錄數。下圖是我的部分記錄表:

圖片

本次我遷移的記錄100多萬條裡面,有355630條日誌記錄,分別在6個日誌表裡面,分別是常規日誌、商品日誌、單據日誌、單位日誌、操作動作日誌和錯誤日誌。考慮到代碼中日誌操作都在幾個函數裡面,更改比較簡單,計劃將日誌記錄和其他記錄分成兩個庫,這樣後期對資料庫備份遷移啥的也節約一點空間,畢竟不出問題日誌記錄並不重要,因為除了日誌記錄外,還有一些往來表,包括單位往來表、商品往來表、銀行往來表等等。

188個表格裡面,有些表記錄數為0,有些表記錄數過萬。最少的表格欄位數2個,最多的過百。相對來說算是個較複雜的系統了。

數據遷移

數據遷移有很多方法,實際上我也試了多種方法,不過最終棄用的就不介紹了,棄用原因無非是自己英文水平太爛,自己基礎知識太薄弱等等,介紹一下最終採用的方法。

最後我選擇了SQLYOG工具,感覺用慣了微軟的SMSS工具後,還是這個工具更相似一點。

我們前面安裝資料庫的時候,順手建了兩個庫,分別是ErpDb和LogDb,打開了root賬號的遠程訪問,同時更改了資料庫的埠號。

打開SQLYOG,輸入IP地址、用戶名、密碼、埠號,連接上我們新裝上的MySQL伺服器。

圖片

測試連接正常就可以連接到MySQL了。

點擊菜單【資料庫】---【導入】---【導入外部數據】,選擇【開始新工作】,點擊【下一步】。選擇【任何ODBC數據源】。

先創建一個連接SQL SERVER的ODBC數據源文件。

【建立新的DSN】---【下一頁】---【下一頁】---【瀏覽】命名一個文件名---【下一頁】---【完成】

伺服器的後面輸入SQL SERVER伺服器地址,如果不是預設1433埠的話,加上逗號跟上埠號。

圖片

輸入連接SQL Server的用戶名和密碼,【下一頁】,更改預設的資料庫為我們需要導數據的那個庫。【下一頁】---【完成】---【測試數據源】---成功後【確定】。

圖片

數據源建好後,選擇該DSN文件,輸入連接的用戶名和密碼。

圖片

輸入要導入數據的MySQL伺服器參數,選擇要導入的資料庫名稱。點擊【下一頁】。

圖片

選擇【從數據源拷貝表】,點擊【下一頁】。選擇要拷貝的表,打勾後,點擊MAP裡面查看映射情況。

圖片

這個地方有幾個建議,有些表不修改可能會不成功:

1、原表bit類型的,改為bool類型;

2、原表timestamp類型的,預設更改為blob類型,手動更改為datetime類型或者timestamp類型;

3、原表int、smallint、largeint類型的,將長度去掉;

4、原表datetime類型的,預設更改為timestamp類型,建議手動改為datetime,或者將長度去掉;

圖片

高級選項裡面,存儲類型選擇InnoDB,是否導入外鍵索引根據需要選擇。

然後直接下一步,到立即運行就可以了。

數據導完發現的問題

我的188個表,103萬條記錄,根據表大小,分了5個任務,反正一晚上搞定了。

搞定之後到MySQL裡面做個檢查,為了保證準確,我對每個表做了一個檢查,命令為:

show tables;

查看表都有了。

select count(*) from XXX;

查看每個表的記錄都全了。

數據導完後,發現了很多問題,我用自己的方法一一解決了,下篇介紹出來,可能大神們對我的方法不屑,不過不噴就好。

列舉幾個:

1、MSSQL的命令,最後是沒有符號的,而MySQL名利最後是需要加分號;的。

2、MSSQL的命令,對數據表的表名、欄位名的大小寫不敏感,而MySQL對這些大小寫很敏感。

3、MSSQL的當前時間表示為GETDATE(),MySQL表示為SYSDATE()。

4、MSSQL的日期計算函數為DATEDIFF,而MySQL的日期計算函數為TIMESTAMPDIFF。

5、MSSQL裡面欄位名可以用[]括起來,MySQL裡面只能用()。

6、MSSQL是用top x來限制條數,MySQL是用limit x來限制條數。

7、MSSQL的欄位名相連的命令直接用+就可以了,MySQL需要用CONCAT連接字元串。

 

作者|IT老叔

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Import-data-from-MSSQLServer-to-MySQL.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建軟鏈接 ln -s [源文件或目錄] [目標文件或目錄] 例如: 當前路徑創建test 引向/var/www/test 文件夾 ln –s /var/www/test test創建/var/test 引向/var/www/test 文件夾 ln –s /var/www/test /var/tes ...
  • 一、什麼是信號? 信號就像是一個突然的電話鈴聲,它會打斷正在進行的程式並引起其註意。 在Linux系統中,信號是一種軟體中斷,它通常是非同步發生的,可以用來通知進程某個事件已經發生。。每個信號都有一個唯一的編號,編號從1開始。進程可以通過註冊信號處理函數來處理信號。 二、信號的分類 Linux系統中的 ...
  • 使用舊電腦玩Linux今天給大家講講使用舊電腦玩Linux,大家應該都知道舊電腦的硬體一般比較落後,特別是一些非常老的電腦,目前還在使用的是機械硬碟,如是要跑windows可想而知,但是Linux系統對硬體性能的要求可比windows低的多了,雖然不像windows那樣有華麗的界面,但Linux是開 ...
  • CentOS 7系統 1. 防火牆操作命令 (1)查看防火牆狀態 systemctl status firewalld (2)重啟防火牆 firewall-cmd --reload (3)關閉防火牆 systemctl stop firewalld (4)啟動防火牆 systemctl start ...
  • iptables是一個Linux內核中的包過濾工具,可以用來過濾、轉發、修改、控制網路流量等。如果想要將主機的所有流量轉發至其他機器,可以使用iptables進行配置。 以下是具體步驟: 1. 首先需要在其他機器上開啟轉發功能,可以使用以下命令開啟: echo 1 > /proc/sys/net/i ...
  • sql的鎖機制,是時刻貫徹在每一次的sql事務中的,為了理解更透徹,介紹鎖之前,我們得先瞭解,鎖是為了乾什麼!! 1、資料庫異常情況 1.1 先來聊聊數據可能發生個異常狀況 1)臟讀:讀未提交,顧名思義,讀到了不該讀的東西,如: 事務B讀到了事務A回滾的數據,就是臟讀 2)不可重覆讀:讀已提交,同個 ...
  • 近期,黑客攻擊亞洲最大的兩家數據中心,造成多家企業大規模數據泄露。如何做好預控措施應對威脅,加強數據安全層級?虹科Redis企業版資料庫升級客戶端證書和發佈/訂閱訪問管理兩大功能為你提供最強保護! ...
  • 摘要:分散式資料庫以大集群規模、彈性伸縮等優異特性,滿足了銀行業務發展的多種需求,也因此成為各大銀行關鍵基礎設施技術創新建設的首選。 今天,由北京先進數通與華為聯合主辦的“銀行業數字化轉型實踐交流會“第二站在成都順利進行,各行業專家在現場一起交流了金融行業數字化轉型的技術創新和實踐成果。華為中國HC ...
一周排行
    -Advertisement-
    Play Games
  • @ 先看一下導出的整體效果(如下圖),其中標註的區域都是通過後臺動態生成的: 一、先在Word中建立好表格模板 1.1、參數創建方法(Word和WPS) 1.1.1、Office中Word域的創建 1.1.1.1、選中指定的單元格 -> 點擊頭部工具欄中的”插入“ -> 選擇 ”文檔部件“ -> 選 ...
  • 在實際工作中,經常會有一些需要定時操作的業務,如:定時發郵件,定時統計信息等內容,那麼如何實現才能使得我們的項目整齊劃一呢?本文通過一些簡單的小例子,簡述在.Net6+Quartz實現定時任務的一些基本操作,及相關知識介紹,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 紙殼CMS支持將評論、留言、表單提交、訂閱等通知,通過WebHook發送到第三方平臺,比如釘釘。 創建釘釘WebHook 需要在釘釘群中創建自定義機器人,具體方法可以參考釘釘的官方文檔: 自定義機器人接入 需要註意的是,在安全設置中不要使用加簽,使用自定義關鍵字即可。在發送的消息中,只要包含這個關鍵 ...
  • 向下轉型的使用 Java的多態性: 父類指向子類的聲明 Animal animal = new Dog()//Dog()重寫了父類Animal 有了對象的多態性以後,記憶體實際上載入的是==子類==的屬性和方法,但是由於變數聲明為==父類類型==,導致編譯時只能調用父類的屬性和方法,子類特有的屬性方法 ...
  • spring源碼環境搭建 組件 版本 jdk 1.8.0_192 spring-framework 5.3.x gradle 7.5.1 idea 2022.3.3 aspectJ 1.9 可根據spring-framwork項目說明靈活選擇 一、拉取spring-framework項目 1、spr ...
  • 首先任何的商業邏輯,光流量增長,沒法變現是沒用的。 就像博客群發提效工具,得有對應的用戶,更得有對應付費用戶群體的畫像。剩下的就是靠增長,被動讓他們找到你的產品,用產品解決他們痛點,他們自然而然會付費。 下麵大致分享下從三個方向分享下: 用戶痛點 -> 真正的付費用戶群體 產品價值 PLG 增長 一 ...
  • Object類的使用 Object類 Object類中的方法可以在網上搜索得到 Object類是所有java類的父類 如果類在聲明中未使用extends關鍵字指明其父類,則預設父類為java.lang.Object類 Object類中的功能(屬性、方法)具有通用性。 屬性:無 方法:equals() ...
  • Qt 源碼分析之moveToThread 這一次,我們來看Qt中關於將一個QObject對象移動至一個線程的函數moveToThread Qt使用線程的基本方法 首先,我們簡單的介紹一下在Qt中使用多線程的幾種方法: 重寫QThread的run函數,將要在多線程執行的任務放到run函數里 /*myt ...
  • 包裝類的使用 包裝類的使用 java提供8種基本數據類型對應的包裝類,使得基本數據類型變數具有類的特征 掌握:==基本數據類型、包裝類、String==三者之間的互相轉換 自動裝箱與自動拆箱==[基本數據類型和包裝類的轉換]== JDK5.0新特性,自動裝箱與自動拆箱。 class Test{ pu ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址 大家好,我是大彬~ 今天來聊聊接 ...