首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 與 SQL Server 互遷實戰:ODBC + DTS 可視化遷移全流程

     編輯:MySQL 資料庫相關知識

利用 MySQL ODBC 驅動 + SQL Server DTS (Data Transformation Services) 實現異構數據庫雙向可視化遷移,無需編寫代碼。

前置準備

  1. 安裝 MySQL ODBC 驅動 (MySQL Connector/ODBC 8.0+)
  2. 配置 系統 DSN (控制面板 → ODBC 數據源 → 系統 DSN → 添加 → MySQL ODBC Driver):
    • Data Source Name: MySQL_Target
    • Server: MySQL IP、Port (3306)
    • Database: 目標庫
    • User/Password: MySQL 賬號
    • 測試連接成功

SQL Server → MySQL 遷移 (DTS 導出)

  1. 打開 SQL Server Enterprise Manager / SSMS
  2. 右鍵源數據庫 → 所有任務 → 導出數據 → 啟動 DTS 導出向導
  3. 數據源:Microsoft OLE DB Provider for SQL Server,選擇源服務器/認證/庫
  4. 目標:選擇 MySQL ODBC Driver → 使用系統 DSN MySQL_Target
  5. 表複製或查詢:選擇「從源數據庫複製表」
  6. 選擇源表:全選或勾選需遷移表
  7. 立即運行 → 完成 → 開始遷移

MySQL → SQL Server 遷移 (DTS 導入)

反向操作:DTS 導入向導,數據源選 MySQL ODBC DSN,目標選 SQL Server OLE DB Provider,其餘步驟對稱。

常見失敗原因與修復

錯誤現象根因修復方案
表遷移失敗數據類型不匹配 (如 SQL Server UNIQUEIDENTIFIER、SQL_VARIANT、GEOGRAPHY 等 MySQL 無對應類型)預先在目標庫手建表,調整類型映射 (GUID→CHAR(36)、幾何→JSON/TEXT),再遷移數據
長文本截斷VARCHAR(MAX)/TEXT 超過 MySQL VARCHAR(65535) 或默認 TEXT 限制目標表用 LONGTEXT/MEDIUMTEXT,或分片存儲
自增衝突源表 IDENTITY 列導入後自增種子重置導入後執行 ALTER TABLE t AUTO_INCREMENT = max_id+1
字符集亂碼DSN 未指定字符集 / 目標表非 utf8mb4DSN 勾選 charset=utf8mb4,目標表 CHARSET=utf8mb4
大數據量超時DTS 默認事務/批次設置不當調整 Commit Size/Batch Size,或改用 mysqldump + BULK INSERT 批量導入

大數據量優化方案:跳過 DTS 直連批量


# 1. MySQL 導出 (單事務、含建表)
mysqldump -h src -u user -p --single-transaction --routines --triggers db > dump.sql

# 2. SQL Server 批量導入 (BCP 或 BULK INSERT)
# 需預建表結構,調整字段映射
BULK INSERT dbo.target_table FROM 'dump.csv' WITH (FIELDTERMINATOR=',', ROWTERMINATOR='\n', FIRSTROW=2);

現代化替代工具

  • AWS DMS / Azure Database Migration Service:雲托管異構遷移,支持 CDC 增量同步
  • Apache SeaTunnel / DataX:開源異構數據集成框架,插件化支持 MySQL/SQL Server/Oracle/PostgreSQL
  • gh-ost / pt-online-schema-change:大表結構變更無鎖遷移
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved