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

SQL Server 遷移至 MySQL 實戰經驗:ODBC 直導 vs PHP 腳本 ETL 對比

     編輯:MySQL 資料庫相關知識

專案需將 SQL Server 全量遷移至 MySQL。對比兩種方案:MySQL ODBC + SQL Server 匯出精靈 vs PHP ETL 腳本,分析優缺點與適用場景。

方案一:MySQL ODBC + SQL Server 匯出精靈

  • 操作:安裝 MySQL ODBC → 建立系統 DSN → SQL Server 匯出精靈選 MySQL DSN
  • 優點:無需寫代碼、GUI 操作、速度快
  • 缺點/坑點:
    1. 資料型別不相容:ntext、image、xml 等無法直接對應
    2. 時間型別衝突:目標表用 INT 存 Unix Timestamp,來源 DATETIME 直接匯入失敗
    3. 產出表結構不理想:欄位長度、預設值、自增屬性常需人工修正
    4. 大物件截斷:ODBC 驅動預設封包限制
  • 結論:僅適用結構簡單、型別標準、資料量小的測試遷移

方案二:PHP ETL 腳本 (採用)

<?php
// 1. 連接來源 (SQL Server via ODBC)
$src = odbc_connect('web', 'admin', '123456');  // DSN='web'
$cur = odbc_exec($src, 'SELECT * FROM mydb.dbo.[user]');

// 2. 連接目標 (MySQL)
$dst = mysql_pconnect('localhost', 'root', '123456');
mysql_select_db('mydb', $dst);

// 3. 逐列轉寫
while (odbc_fetch_row($cur)) {
  $f1 = odbc_result($cur, 1);  // id
  $f2 = odbc_result($cur, 2);  // name
  $f3 = odbc_result($cur, 3);  // username
  $f4 = odbc_result($cur, 4);  // password
  $f5 = odbc_result($cur, 5);  // recdate (DATETIME)
  $f5 = timetoint($f5);        // 轉 Unix Timestamp

  $sql = "INSERT INTO `user` (id,name,username,password,recdate)
          VALUES ('$f1','$f2','$f3','$f4','$f5')";
  mysql_query($sql, $dst);
}

function timetoint($str) {
  list($date, $time) = explode(' ', $str);
  list($y,$m,$d) = explode('-', $date);
  list($h,$i,$s) = explode(':', $time);
  return mktime($h,$i,$s,$m,$d,$y);
}
?>

PHP ETL 優勢

  • 完全掌控型別轉換:DATETIME → INT、ntext → TEXT、image → LONGBLOB
  • 可實施清洗規則:去重、修剪、預設值、編碼轉換
  • 分批提交:每 1000 列 COMMIT,避免長事務
  • 斷點續傳:記錄最後成功 ID,支援中斷恢復
  • 進度監控:寫入日誌、發送通知

現代化遷移工具鏈建議

結語

手工 ETL 腳本雖靈活但維護成本高。生產遷移首選 MySQL Workbench Migration Wizard 或雲端 DMS;極大表/零停機需求用 gh-ost / Debezium。核心原則:型別對應表標準化、分批事務、驗證 checksum、雙寫驗證期、回滾預案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
工具適用場景特點
MySQL Workbench Migration Wizard異構遷移標準化GUI、型別對應表、支援 SQL Server/Oracle/PostgreSQL
AWS DMS / Azure Database Migration Service雲端遷移、CDC 同步全量+增量、任務監控、無伺服器
pt-archiver / gh-ost大表線上遷移/重組Percona Toolkit、無鎖、可節流
Debezium + KafkaCDC 即時同步事件驅動、微服務整合