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

MySQL 觸發器實現異步同步至遠端 SQL Server 方案

     編輯:MySQL 資料庫相關知識

架構概述

需求:MySQL 新增資料時,自動同步寫入遠端 SQL Server。採用 MySQL 觸發器 + 暫存表 + SQL Server 排程作業 架構。

核心元件

  1. MySQL 觸發器:寫入暫存表 MySQL_tem
  2. SQL Server 預存程序:透過 OPENQUERY 讀取 MySQL 暫存表,寫入 SQL Server 目標表並清空暫存表
  3. SQL Server 觸發器:於 sql_tem 寫入時同步至正式表 sql_test
  4. SQL Server Agent 作業:定時執行預存程序

程式碼實作

① MySQL 觸發器(寫入暫存表)

DELIMITER //
CREATE TRIGGER insert_mysql_test
BEFORE INSERT ON MySQL_test
FOR EACH ROW
BEGIN
    INSERT INTO MySQL_tem SET tem_id = NEW.test_id, tem_name = NEW.test_name;
END //
DELIMITER ;

② SQL Server 預存程序(跨伺服器同步)

USE kk;
GO
CREATE PROCEDURE select_x
AS
BEGIN
    INSERT INTO sql_tem (x_id, x_name)
    SELECT * FROM OPENQUERY(GLB, 'SELECT x_id, x_name FROM MySQL_tem');

    DELETE FROM sql_tem;
    DELETE FROM OPENQUERY(GLB, 'SELECT * FROM MySQL_tem');
END
GO

GLB 為已設定的 Linked Server 名稱,指向 MySQL。

③ SQL Server 觸發器(同步至正式表)

CREATE TRIGGER tr_insert_tem
ON sql_tem
FOR INSERT
AS
BEGIN
    INSERT INTO sql_test
    SELECT * FROM inserted;
END
GO

④ SQL Server Agent 作業排程

建立作業,步驟執行 EXEC select_x,設定排程(如每分鐘執行一次)。

SQL Server Agent 作業設定

流程圖解

同步架構流程圖

優缺點分析

優點缺點
無需修改應用程式碼有延遲(取決於作業排程頻率)
利用資料庫原生功能,可靠度高需維護 Linked Server 連線
暫存表機制避免資料遺失雙向同步較複雜,易產生衝突
⚠ 注意: 此方案適用於單向同步(MySQL → SQL Server)。生產環境請務必測試網路穩定性、Linked Server 權限與資料型別對應。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved