資料庫轉換日記---從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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...