需求:MySQL 新增資料時,自動同步寫入遠端 SQL Server。採用 MySQL 觸發器 + 暫存表 + SQL Server 排程作業 架構。
MySQL_temOPENQUERY 讀取 MySQL 暫存表,寫入 SQL Server 目標表並清空暫存表sql_tem 寫入時同步至正式表 sql_testDELIMITER //
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 ;
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。
CREATE TRIGGER tr_insert_tem
ON sql_tem
FOR INSERT
AS
BEGIN
INSERT INTO sql_test
SELECT * FROM inserted;
END
GO
建立作業,步驟執行 EXEC select_x,設定排程(如每分鐘執行一次)。


| 優點 | 缺點 |
|---|---|
| 無需修改應用程式碼 | 有延遲(取決於作業排程頻率) |
| 利用資料庫原生功能,可靠度高 | 需維護 Linked Server 連線 |
| 暫存表機制避免資料遺失 | 雙向同步較複雜,易產生衝突 |