場景與工具鏈
- 源/目標:MySQL ↔ SQL Server 7/2000
- 工具:SQL Server Enterprise Manager (MMC) + DTS 導入/導出向導
- 橋梁:MySQL ODBC 3.51/5.x 驅動(
myodbc3.dll/myodbc5.dll)
前置準備
- 下載安裝 MySQL ODBC 驅動(32/64 位匹配 SQL Server 進程位數)
- 配置系統 DSN(控制面板 → 管理工具 → ODBC 數據源):
- 名稱:
MySQL_DSN
- Server、Database、User、Password、Port(3306)、Charset(utf8)
- 測試連接成功
SQL Server → MySQL 遷移步驟
- 打開 Enterprise Manager,右鍵源數據庫 → 所有任務 → 匯出數據
- 數據源:
Microsoft OLE DB Provider for SQL Server,選源實例/庫
- 目標:
Microsoft OLE DB Provider for ODBC Drivers,選 MySQL_DSN
- 選「從源數據庫複製表」,勾選需遷移表(或全選)
- 可選:
編輯映射 調整類型對應(如 datetime→datetime、text→longtext、bit→tinyint(1))
- 立即執行 → 完成
MySQL → SQL Server 遷移(反向)
同上,源選 MySQL_DSN,目標選 SQL Server OLE DB Provider。
常見失敗原因與修復
| 錯誤現象 | 原因 | 修復 |
| 類型不匹配轉換失敗 | SQL Server uniqueidentifier、sql_variant 等無對應 MySQL 類型 | 編輯映射改為 char(36)/varchar,或預處理導出視圖 |
| 長度截斷 | 目標列長度 < 源數據實際長度 | 擴大目標列長度,或啟用「錯誤行重定向」記錄問題行 |
| 主鍵/自增衝突 | 身份列插入衝突 | 目標表啟用 IDENTITY_INSERT ON,或去除自增屬性後導入 |
| 字符集亂碼 | ODBC DSN 未設 Charset、或雙端編碼不一致 | DSN 設 charset=utf8mb4,SQL Server 列用 nvarchar |
大數據量優化建議
- 分批導出:
WHERE id BETWEEN ... 分多個 DTS 包並行
- 禁用目標表索引/約束/觸發器,導入後重建
- 使用
BULK INSERT / bcp / mysqldump --tab + LOAD DATA 替代 DTS,速度提升 10x+
- 網絡層面:同機房千兆/萬兆直連,避免跨公網
總結
MySQL ODBC + DTS 實現了異構遷移的「零代碼」配置化流程,適合中小數據量、一次性遷移。大數據量、增量同步、生產級切換請使用 mydumper/myloader、Debezium CDC、SQL Server Migration Assistant (SSMA) 等專業工具鏈。
- 上一篇文章: 調大 MySQL 最大連接數:修改 mysqld_safe 啟動參數
- 下一篇文章: MySQL 數據庫備份策略與實戰:mysqldump、文件拷貝、二進制日誌完整體系
Copyright ©
程式碼之家 All Rights Reserved