将数据从 SQL Server 镜像到 MySQL 的最佳方法

Kev*_*ski 5 mysql replication sql-server mirroring

我需要有关将数据从具有 SQL Server 后端的第三方销售点系统复制到 MySQL 数据库的帮助。

具体来说,有人可以建议在我们的 MySQL 实例上从 SQL Server 镜像数据的最佳方法吗?

当前流程:

  • 从远程 SQL Server 中选择一个数据集并使用 PHP 写入文本文件。
  • 使用 PHP 使用 LOAD INFILE 导入文本文件。
  • 某些数据集必须分块为多个迭代。

缺点:

  • 它缓慢而繁琐。
  • 需要每 x 分钟轮询一次他们的服务器以进行更改。
  • 难以检测更改,因为大多数表在行上没有“更新时间”来指示更改。因此,我们有时不得不假设我们将需要整个表。
  • 表多达 1100 万条记录(并且还在增长)。
  • 带宽使用效率低下。
  • 每当 SQL Server 上的架构更改(临时通知)时,我们都必须对更改做出反应并更改每个查询。

额外情况:

  • 我们的第三方 SQL Server 主机不允许对系统进行任何更改。
  • 我方(MySQL)对系统变化更加灵活。
  • 由于我们是 LAMP 商店,因此无法更改为 SQL Server 平台。
  • 我们是非常有能力的 IT 开发人员,但这个问题似乎需要额外的建议。
  • 管理层反对有机的销售点。

Cad*_*oux 2

数据实际上需要在同一个模型中复制吗?

您将在 MySQL 端对数据做什么?

我强烈考虑将您控制的另一个数据库或实例放在 SQL Server 端,以便能够在该端拍摄快照,这样您就可以减少更少的数据(将快照与实时数据进行比较应该很快),并查看您的内容想要在 MySQL 端处理数据,因为您可能实际上希望在提取过程中转换数据以更好地方便加载。

我认为您会发现,拥有一个由您控制的沙箱数据库或实例与供应商数据库并置将为您提供巨大的力量,同时仍然允许供应商在不受干扰的情况下运行。

这还有助于减少带宽(不需要的列、非规范化通常会增加数据大小,但并非总是如此)并减少加载时间或加载过程的复杂性。MySQL 端对应于您实际运行的查询的不同模型也可以提高报告甚至负载的性能。

拥有针对源数据的视图还可以帮助减轻更改的影响 - 尽管您可能无法使用 DDL 触发器和架构绑定来阻止破坏依赖项的更改,但您可能会在提取失败时捕获架构更改,而不是在提取忽略之后捕获架构更改。删除一些新的专栏。