SQL Server 遷移至MySQL 關鍵步驟的梳理總結

来源:https://www.cnblogs.com/xuliuzai/archive/2018/12/12/10109776.html
-Advertisement-
Play Games

遷移主要是通過Navicat工具來實現的。遷移工具的選定在此不討論。 遷移前準備 1.提前通知DBA\SA\BI等,並確認發佈計劃及資料庫遷移方案。 2.梳理出SQL Server DB 中影響業務的Job(遷移的過程中要關閉)、DB LinkServer、相關賬號。 3.模擬數據遷移,評估出相關精 ...


遷移主要是通過Navicat工具來實現的。遷移工具的選定在此不討論。

遷移前準備

1.提前通知DBA\SA\BI等,並確認發佈計劃及資料庫遷移方案。

2.梳理出SQL  Server DB 中影響業務的Job(遷移的過程中要關閉)、DB LinkServer、相關賬號。

3.模擬數據遷移,評估出相關精確的時間。例如每張大表的耗時(我們定義的表準是,每張百萬級別的表耗時都要測評出來),每2分鐘一個進度標記。Navicat 工具不能指定SQL條件遷移 ,需全表遷移,因此 不支持增量遷移。SQL Server 和 MySQL 表結構需一致。表名、欄位名一致。如果不一致,需要創建一個過渡庫過渡表來進行遷移。

4.創建生產環境的MySQL資料庫,將最終的Dev環境的表導入生產環境(只導表結構)。與SQL Server 相比,如果有表結構調整,最好要求開發提供數變化的list(包含新增表、新增索引等)。

5.對生產環境的MySQL進行賬號設置(DBkey等相關配置一起設置)。

6.對生產環境的表進行檢查(主要表結構的變化,例如主要欄位、索引、預設值等)。Navicat工具導入的過程中,可以保留索引,但是預設值會丟失,並且預設欄位不理想。此步驟可參照附錄。

7.進行測試(全鏈路,從資料庫的連接到插入更新等)。測試可以是全面的,DB對資料庫進行測試,當然,針對應用程式,可以要求測試人員提供一份性能壓測報告。

8.資料庫備份作業的設置(完整備份和Binlog備份)。

9.驗證遷移步驟及準備腳本

遷移中

1.請SA團隊暫停相關的業務服務

2.禁用Server 上DB的相關賬號。

3.停止備份Job 和影響業務的Job。

4.數據遷移。

5.驗證數據,主要是比對遷移前後數據量。

6.通知全員數據遷移完畢。通知SA開啟相關服務。

遷移後

1.刪除鏈接伺服器(DBLink,本地相關鏈接伺服器 和異地有關此DB的連接伺服器)。

2.通過活動監視器或SQL命令查詢是否還有對此 SQL Server DB的請求。

3.MySQL資料庫性能監控。

4.資料庫做一個完整備份,Copy至異地伺服器。Copy至異地,主要是考慮伺服器資源的回收,此為,在異地最好要添加一個對備份文件的描述,例如此文件是什麼時候產生的,用途是什麼,是否可以刪除,建議保留時間,操作人等。

5.關閉SQL Server 剩餘的Job。

6.Detach (分離)資料庫(一定是Detach 不要直接刪除,雖然有備份文件,但恢復還是相對較慢的)。

7.如果此伺服器上沒有其它的用戶資料庫,停止SQL Server 服務。

8.歷史資料庫的遷移(如果有的話)。

9.歸檔數據Job的設置。

10.本次遷移的總結報告(主要是梳理出遷移過程註意的事項和提升的建議)

 

附錄

附錄A

SQL Server 與 MySQL 欄位類型對照表

SQL Server MySQL
n/varchar(1-4000) varchar(1-4000)
varchar(4000-8000) text
n/varchar(max) longtext
char char
nchar varchar
timestamp timestamp
time datetime(3)
datetime datetime(3)
date datetime(3)
smalldatetime datetime(3)
numeric decimal
numeric17 decimal
ntext mediumtext
text mediumtext
bit tinyint
int int
tinyint tinyint
bigint bigint
smallint int
float double
decimal decimal
varbinary varchar
binary varchar
image longblob
uniqueidentifier varchar(40)
real double
money decimal(19,4)
longblob longblob

 

附錄B

查詢生成 需添加預設值和調整欄位的SQL語句。

以下T-SQL在需要遷移的SQL Server DB上執行,生成的SQL 語句在MySQL直接執行(sql_text列)。

 

SELECT  'alter table ' + D.name + ' modify column ' + A.name+' '
        + CASE WHEN B.name = 'datetime' THEN ' datetime(3)'
               WHEN B.name = 'bit' THEN ' tinyint(1)'
               WHEN B.name = 'decimal'
               THEN ' decimal('
                    + CAST(COLUMNPROPERTY(A.id, A.name, 'PRECISION') AS VARCHAR(10))
                    + ','
                    + CAST(ISNULL(COLUMNPROPERTY(A.id, A.name, 'Scale'), 0) AS VARCHAR(10))
                    + ')'
               WHEN B.name like '%varchar' AND COLUMNPROPERTY(A.id, A.name, 'PRECISION')=-1 THEN ' varchar(4000)' 
               WHEN B.name like '%varchar' AND COLUMNPROPERTY(A.id, A.name, 'PRECISION')<>-1 THEN ' varchar('+CAST(COLUMNPROPERTY(A.id, A.name, 'PRECISION') AS VARCHAR(20))+')'
               WHEN B.name like '%varbinary' AND COLUMNPROPERTY(A.id, A.name, 'PRECISION')=-1 THEN ' varbinary(4000)'
               WHEN B.name like '%varbinary' AND COLUMNPROPERTY(A.id, A.name, 'PRECISION')<>-1 THEN ' varbinary('+CAST(COLUMNPROPERTY(A.id, A.name, 'PRECISION') AS VARCHAR(20))+')'
               ELSE B.name
                 END + CASE WHEN A.isnullable = 1 THEN ' NULL'
                     ELSE ' NOT NULL '
                END + ' default '
             + CAST (CASE WHEN E.text = '(getdate())' THEN 'CURRENT_TIMESTAMP(3)'
                     WHEN E.text LIKE '(%'
                     THEN REPLACE(REPLACE(E.text, '(', ''), ')', '')
                     ELSE E.text
                END AS VARCHAR(30))
           + CASE WHEN ISNULL(G.[value], '') <> ''
               THEN ' COMMENT '''
                    + CAST(ISNULL(G.[value], '') AS VARCHAR(100)) + ''';'
               ELSE ';'
          END AS sql_text ,
        表名 = D.name ,
        欄位名 = A.name ,
        欄位說明 = ISNULL(G.[value], '') ,
        類型 = B.name ,
        占用位元組數 = A.length ,
        長度 = COLUMNPROPERTY(A.id, A.name, 'PRECISION') ,
        小數位數 = ISNULL(COLUMNPROPERTY(A.id, A.name, 'Scale'), 0) ,
        允許空 = CASE WHEN A.isnullable = 1 THEN 'Y'
                   ELSE 'N'
              END ,
        預設值 = ISNULL(E.text, '')
FROM    syscolumns A
        INNER JOIN systypes B ON A.xusertype = B.xusertype
        INNER JOIN sysobjects D ON A.id = D.id
                                   AND D.xtype = 'U'
                                   AND D.name <> 'dtproperties'
        INNER JOIN syscomments E ON A.cdefault = E.id
        LEFT JOIN sys.extended_properties G ON A.id = G.major_id
                                               AND A.colid = G.minor_id
        LEFT JOIN sys.extended_properties F ON D.id = F.major_id
                                               AND F.minor_id = 0
WHERE   B.name <> 'uniqueidentifier'
        and D.name not in ('需排除的表')
ORDER BY D.name ,
        A.id ,
        A.colorder

 

 

本文版權歸作者所有,未經作者同意不得轉載,謝謝配合!!!


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

-Advertisement-
Play Games
更多相關文章
  • 在上章學習33.Linux-實現U盤自動掛載(詳解)後,只是講解了普通U盤掛載,並沒有涉及到多分區U盤,接下來本章來繼續學習 1.多分區U盤和普通U盤區別 1)U盤插上只會創建一個/dev/sda文件,這種一般表示該U盤沒有分區,這個sda文件便代表該U盤總大小,我們只需要掛載/dev/sda即可 ...
  • ubuntu16.4系統查看自啟服務: 需要自行安裝一個sysv-rc-conf的工具來查看: 查看自啟命令: Gentos6.8系統查看自啟服務:(註意這個只是查看用RPM包安裝的預設的獨立服務) 查看基於Xinetd的服務: 需要安裝Xinetd: 查詢系統中開啟的服務: ...
  • SQL Server系統表sysobjects 介紹 sysobjects 表結構: 列名 數據類型 描述 name sysname 對象名,常用列 id int 對象標識號 xtype char(2) 對象類型。常用列。xtype可以是下列對象類型中的一種: C = CHECK 約束 D = 預設 ...
  • 一. 概述 上一篇我們介紹瞭如何將數據從 mysql 拋到 kafka,這次我們就專註於利用 storm 將數據寫入到 hdfs 的過程,由於 storm 寫入 hdfs 的可定製東西有些多,我們先不從 kafka 讀取,而先自己定義一個 Spout 數據充當數據源,下章再進行整合。這裡預設你是擁有 ...
  • 刪除數據分為兩種:一種是刪除索引(數據和表結構同時刪除,作用同SQLSERVER 中 DROP TABLE "表格名" ),另一種是刪除數據(不刪除表結構,作用同SQLSERVER中Delete 語句)。 一:刪除索引: 刪除單個索引可以使用命令 【DELETE /索引名稱】 刪除多個索引可以使用命 ...
  • mysql是使用最廣泛的開源關係資料庫之一,大多數開發人員只會簡單的用sql語句操作數據,而不理解服務端架構和sql查詢語句在服務端的執行過程,本文會從sql語句執行路徑來介紹mysql服務端架構,包括連接器,查詢緩存,分析器,優化器等。 ...
  • 1.排序概述 2.排序分類 3.WritableComparable案例 這個文件,是大數據-Hadoop生態(12)-Hadoop序列化和源碼追蹤的輸出文件,可以看到,文件根據key,也就是手機號進行了字典排序 欄位含義分別為手機號,上行流量,下行流量,總流量 需求是根據總流量進行排序 Bean對 ...
  • 登錄之後使用如下命令: 還有不知是不是因為mysql版本問題,一開始設置的密碼,使用navicat進行連接測試的時候,報錯: 解決辦法,就是使用如下語句再進行一次密碼修改: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...