我正在尝试将MySQL表与SQL Server 2008中的表同步。我想要的是从SQL服务器到MySQL的同步方式。我已经将表从SQL Server转移到MySQL了我现在需要的是每次运行时都会自动更新表(检查更改,插入新行,删除不存在的行)的PHP代码。有人能帮助我吗?
答案 0 :(得分:2)
虽然我并不完全相信,这是一个好主意,但我知道在某些用例中这可能是必要的(参见最后一段),因为我们在不久前有类似的要求。
这很有效:
在发送方(无论是什么,在你的情况下是SQL服务器)
在接收方(无论是什么,在你的情况下是MySQL)
这个方案工作得很好,即使在两个主机之间只能“对话”它们之间的HTTP - 它也非常强大,因为丢失的连接(或接收方重启)只会缓冲发送端的变化更改日志表,在重新建立连接时清除它。
答案 1 :(得分:1)
可能有用的是ETL工具。专为SQL Server设计的是SSIS。有可能使用它来帮助引入您想要的数据,但我以前从未将它用于MySQL。根据这篇文章[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
不幸的是,上一篇文章描述了它从MySQL到SQL Server,这不是你想要的方向。有可能让它以其他方式工作,但您可能需要为MySQL找到一个ETL工具。虽然快速的Google搜索显示http://www.benetl.net/,但我并不知道有任何偏见,但我无法保证。
答案 2 :(得分:1)
我认为PHP在这里无关。
您可以使用各种决定,例如:
答案 3 :(得分:1)
我建议您在每个表中都有一个时间戳列,每次插入或更新时,都要更新每个受影响行的时间戳值。然后,迭代所有表,检查时间戳是否比目标数据库中的时间戳更新。如果它更新,请检查是否必须插入或更新。 观察1:请注意物理删除,因为从源db中删除了行,您必须在服务器db上执行相同的操作。您可以解决这个问题,避免物理删除或使用时间戳记录表中的每个删除。像这样的东西: DeletedRows =(id,table_name,pk_column,pk_column_value,timestamp) 因此,您必须读取DeletedRows表的所有新行,并使用table_name,pk_column和pk_column_value在服务器上执行删除。 观察2:注意FK,因为在与另一个表相关的表中插入数据可能会失败。您应该在数据同步之前停用每个FK。