資料庫轉換日記---從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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...