首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL Server 遷移 MySQL 實戰:ODBC 連結伺服器導入大數據量方案

     編輯:MySQL 綜合教學

SQL Server 遷移 MySQL 實戰:ODBC 連結伺服器導入大數據量方案

異構資料庫遷移首選:SQL Server 連結伺服器 + MySQL ODBC 驅動,無需中間文件,支援千萬級大表分批遷移。

1. 環境準備

  • MySQL ODBC 驅動:官網下載 MySQL Connector/ODBC 8.0(x64),安裝至 SQL Server 主機。
  • 建立系統 DSN (ODBC 資料來源):
    • Data Source Name: MySQL_Link
    • TCP/IP Server: MySQL IP
    • Port: 3306
    • User/Password: MySQL 帳號
    • Database: 目標庫
    • Charset: utf8mb4
  • SQL Server 建立連結伺服器:
    EXEC sp_addlinkedserver
      @server = 'MYSQL_LINK',
      @srvproduct = 'MySQL',
      @provider = 'MSDASQL',
      @datasrc = 'MySQL_Link';  -- 系統 DSN 名稱
    
    EXEC sp_addlinkedsrvlogin
      @rmtsrvname = 'MYSQL_LINK',
      @useself = 'FALSE',
      @locallogin = NULL,
      @rmtuser = 'mysql_user',
      @rmtpassword = 'mysql_pass';

2. 測試連通性

-- 1. 建立目標表結構(MySQL 端預先建好,或用 SSMS 生成腳本手動調整型別對應)
-- 型別映射關鍵:
-- BIGINT → BIGINT
-- DATETIME2 → DATETIME(6)
-- NVARCHAR → VARCHAR (utf8mb4)
-- UNIQUEIDENTIFIER → CHAR(36)
-- BIT → TINYINT(1)

-- 2. 分批寫入(避免單次事務過大、鎖表、記憶體溢出)
DECLARE @BatchSize INT = 50000;
DECLARE @MaxId BIGINT = (SELECT MAX(Id) FROM src_table);
DECLARE @StartId BIGINT = 0;

WHILE @StartId <= @MaxId
BEGIN
    INSERT INTO OPENQUERY(MYSQL_LINK, 'SELECT col1, col2, col3 FROM target_table')
    SELECT col1, col2, col3
    FROM src_table
    WHERE Id > @StartId AND Id <= @StartId + @BatchSize;

    SET @StartId = @StartId + @BatchSize;
    -- 可選:WAITFOR DELAY '00:00:01' 降低壓力
END

4. 型別映射對照表

SQL ServerMySQL備註
BIGINTBIGINT
INTINT
BITTINYINT(1)
DECIMAL(p,s)DECIMAL(p,s)
DATETIME / DATETIME2DATETIME(6)精度對齊
NVARCHAR(n)VARCHAR(n*2)utf8mb4 字元集
VARCHAR(n)VARCHAR(n)
VARBINARY(MAX)LONGBLOB
UNIQUEIDENTIFIERCHAR(36)存 UUID 字串

5. 常見問題與對策

  • 中文亂碼:DSN 設定 Charset=utf8mb4、SQL Server 端 N'字串' 明確 Unicode。
  • 自增主鍵衝突:MySQL 表設 AUTO_INCREMENT,遷移時不寫入 ID,或用 SET @id=0; UPDATE ... SET id=@id:=@id+1 重排。
  • 事務日誌暴增:SQL Server 簡單恢復模式 / 批次提交 / 定期 BACKUP LOG。
  • ODBC 驅動崩潰:升級最新 8.0.x、調整 PacketSize、分批次。

6. 驗證遷移結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved