【问题标题】:Microsoft Sql Server to MySQL synchronization through phpMicrosoft Sql Server 到 MySQL 通过 php 同步
【发布时间】:2012-01-05 14:27:50
【问题描述】:

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

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

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() 输出,但没有关于此主题的任何配置)?

您对这种同步有类似的经验吗? 任何帮助将不胜感激!

谢谢, 卢克

【问题讨论】:

    标签: php mysql sql-server synchronization migration


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      谢谢你给我的建议!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-25
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 2010-10-06
        相关资源
        最近更新 更多