在mysql中将选定的数据从一个db转储到另一个db

时间:2012-02-17 22:42:01

标签: php mysql

情况如下:

我在远程服务器上有一个mySQL数据库。我需要来自其中4个表的数据。有时,这些表的模式会更改(添加新字段,但不会删除)。目前,表格> 300,000条记录。

需要将此数据导入localhost mySQL实例。这些相同的4个表存在(具有相同的名称),但所需的字段是远程数据库表中字段的子集。这些本地表中的数据被认为是只读的,永远不会写入。所有东西都需要在事务中运行,因此本地表中总会有一些数据,即使它只有一天。 localhost表由活动网站使用,因此整个过程需要尽快完成,以最大限度地减少停机时间。

此过程每天运行一次。

我看到的选项:

  1. 获取远程表结构/数据的mysqldump并保存到文件。删除localhost表,然后运行转储的sql脚本。然后在4个表上重新创建所需的索引。

  2. 截断localhost表。在PHP中的远程数据库上运行SELECT查询,仅检索所需的字段而不是整行。然后遍历结果并从此数据创建INSERT语句。

  3. 我的问题:

    • 表现明智,这是我最好的选择?
    • 哪一个会最快完成?
    • 是否有人会在服务器上加重负载?
    • 会索引 表格在两个选项中花费的时间相同吗?

1 个答案:

答案 0 :(得分:0)

如果没有充分的理由让本地d / b成为远程的子集,请使结构相同并在所需的表上启用database replication。主机通过复制跟踪所做的所有更改,并将每个从站d / b的指针管理到更改中。每个奴隶说给我自上次请求以来的所有更改。对于相当大的数据库,这比您选择的任何替代方案都要高效得多。它只需要适度的成本。

对于架构更改,我认为主机会记录alter信息,因此从站也可以复制这些信息。该机制肯定会复制drop table ... if existscreate table ... select,因此alter逻辑上应该遵循,但我还没有尝试过。


这是:confirmation that alter is properly replicated