Microsoft Sql Server通过php同步到MySQL


Microsoft Sql Server to MySQL synchronization through php

我正在尝试同步一个mssql数据库(托管在客户办公室)与mysql数据库是在托管平台上,那里有客户的网站。

我已经成功地同步了数据库的四个表(结构和数据)中的三个。当我试图将第4个表与每个产品的图像同步时,麻烦来了,该表有大约2300条记录和2个BLOB字段。我尝试的第一件事是

SELECT * FROM chunkyTable

但是许多超时被触发(尽管我将" mssql.timeout "设置为7200)。

所以我设置了一个分页同步,每个查询读取10条记录,并将它们插入mysql数据库。

前150条记录一切正常。从我做的日志中我可以看到,对于前15页,同步10条记录大约需要2到6秒(考虑到我从网站连接到与普通ADSL连接的mssql服务器,这构成了一个相当大的瓶颈)。从第16页开始,同步10条记录所需的时间增加到5:30秒。我起初以为这是由于前150条记录没有存储任何图像,所以我检查了插入到mysql中的内容,发现没有插入任何内容!

这些让我认为mysql可能对传递给mysql_query()函数的参数长度有一些限制。查询的组成方式为:

INSERT INTO chunckyTable(field1,field2,...fieldN)
VALUES (val1,val2,val3,...,valN),(val4,val5,val6,...,valM),

等等

重复10条记录。

你知道传递给mysql_query函数的sql字符串的最大长度是否有一些限制(我看了看phpinfo()输出,但没有关于这个主题的任何配置)?

您有类似的同步经验吗?任何帮助都将非常感激!

谢谢,《路加福音》

我找到了触发错误的原因。实际上有两件事。

  1. 我以这种方式编写查询$query="'".mysql_real_escape_string($val)。"'"但是'"正在让查询崩溃。
  2. Mysql @@global。我的服务器上的max_allowed_packet设置为1Mb,但是每行包含2个blob字段,其中包含~150Kb的图像。所以每行都超过300Kb,因为还有记录的数据,当我在一个查询中打包10行的插入时,我超过了max_allowed_packet的限制。为了解决这个问题,我插入一行一行

谢谢你给我的建议!

如果您手动转储mssql/insert到mysql一行会发生什么?另外-你可以尝试mysqli(注意i的意思是改进的mysql扩展),在任何情况下,它应该比旧的mysql扩展更好。