2012-02-09 83 views
2

我正試圖使MySQL表與SQL Server 2008中的表同步。我想要的是從SQL服務器到MySQL的同步方式。我已經將表從SQL Server轉移到MySQL,我現在需要的只是PHP代碼,它會在運行時自動更新表(檢查更改,插入新行,刪除不存在的行)。有誰能夠幫助我?SQL Server和MySQL之間的單向同步

+0

你堅持PHP代碼,而不是第三方工具? – 2012-02-09 09:33:11

+0

您可以修改架構嗎? – iWantSimpleLife 2012-02-09 11:05:18

+0

哪裏?在SQL Server數據庫中? – Jaro 2012-02-09 12:54:11

回答

1

有什麼用途可以使用ETL工具。一個爲SQL Server設計的是SSIS。有可能使用它來幫助引入你想要的數據,但我以前從來沒有用過它。根據這篇文章[http://blogs.msdn.com/b/mattm/archive/2008/03/03/connecting-to-mysql-from-ssis.aspx]它實際上是可能的。

另一篇文章,可能幫助你: http://www.packtpub.com/article/mysql-data-transfer-using-sql-server-integration-services-ssis

Unfortuantly上一篇文章中所描述的那樣從MySQL到SQL Server,這是不是你想要的方向。有可能以其他方式工作,但您可能需要爲MySQL找到一個ETL工具。我沒有意識到我的頭頂有問題,儘管谷歌搜索快速顯示http://www.benetl.net/,但我不能擔保。

+0

這本來是一個很好的解決方案,但它似乎的SQL Server Express不支持SSIS – Jaro 2012-02-16 13:10:35

+0

啊,我沒你使用快速實現。這有點恥辱。如果您可以找到可以連接到MS SQL Server和MySQL服務器的語言(也許是Java或C#),則可以手動移動所有行,儘管您需要爲每個表編寫一個函數。這不會是最好的解決方案,但它應該工作。 (C#可以明顯地連接MSSQL,因爲它從MS,而且也http://bitdaddys.com/MySQL-ConnectorNet.html爲MySQL) – joshhendo 2012-02-16 21:28:10

1

我認爲PHP在這裏沒有任何關係。

您可以使用各種決策,如:

  • SSIS
  • DTS包
  • 鏈接服務器
  • 觸發器+同步隊列表
  • 各種第三方的ETL工具
  • 。 ..
+0

是啊,我開始認爲PHP可能不是同步太好太 – Jaro 2012-02-09 09:52:07

2

雖然我不完全相信,這是一個好主意,但我知道這在某些使用情況下可能是必需的(請參見最後一段),因爲我們在不久之前也有類似的需求。

這相當奏效:

在發送端(不管它是什麼,你的情況SQL服務器)

  • 創建表 '更新日誌' 爲ID(PK),表名, tablepk,動作,數據
  • 上創建將更改寫入更改日誌表後,操作成功
  • 有你的代碼更改日誌表的內容發送到發送端的相關表上的觸發器文本字段
  • 如果這個成功,從更新日誌表中刪除它(記住:這裏有競爭條件的潛在可能!)

在接收端(不管它是什麼,你的情況的MySQL)

  • 接收changelog的數據
  • 解析它
  • 對數據庫運行的變化
  • 如果這作品,發送確認

該方案工作得很好,甚至2之間主機可以「說話」僅HTTP他們之間 - 這也是相當穩健,作爲連接丟失(或接收方重啓)將只緩衝了變化,發送端更新日誌表,清理出來時,重新建立連接。

+0

後看到所有的答案我不確定使用PHP這是一個好主意。謝謝你的答案,但我想我會使用鏈接joshhendo張貼 – Jaro 2012-02-09 10:12:17

1

我建議你在每一個表,每次插入或更新時間timestamp列,更新每個受影響的行的時間戳值。然後,遍歷所有表,檢查時間戳是否比目標數據庫中的時間戳更新。如果它較新,則檢查是否需要插入或更新。 觀察1:由於從源數據庫中刪除行,所以要注意物理刪除,並且您必須在服務器數據庫上執行相同的操作。您可以解決這個問題,避免物理刪除或記錄具有時間戳的表中的每個刪除。例如: DeletedRows =(id,table_name,pk_column,pk_column_value,timestamp) 因此,您必須讀取DeletedRows表的所有新行並使用table_name,pk_column和pk_column_value在服務器上執行刪除。 觀察2:注意FK,因爲將數據插入到與另一個表相關的表中可能會失敗。數據同步之前,應該停用每個FK。

相關問題