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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...