情况如下:
我在远程服务器上有一个mySQL数据库。我需要来自其中4个表的数据。有时,这些表的模式会更改(添加新字段,但不会删除)。目前,表格> 300,000条记录。
需要将此数据导入localhost mySQL实例。这些相同的4个表存在(具有相同的名称),但所需的字段是远程数据库表中字段的子集。这些本地表中的数据被认为是只读的,永远不会写入。所有东西都需要在事务中运行,因此本地表中总会有一些数据,即使它只有一天。 localhost表由活动网站使用,因此整个过程需要尽快完成,以最大限度地减少停机时间。
此过程每天运行一次。
我看到的选项:
获取远程表结构/数据的mysqldump并保存到文件。删除localhost表,然后运行转储的sql脚本。然后在4个表上重新创建所需的索引。
截断localhost表。在PHP中的远程数据库上运行SELECT查询,仅检索所需的字段而不是整行。然后遍历结果并从此数据创建INSERT语句。
我的问题:
答案 0 :(得分:0)
如果没有充分的理由让本地d / b成为远程的子集,请使结构相同并在所需的表上启用database replication。主机通过复制跟踪所做的所有更改,并将每个从站d / b的指针管理到更改中。每个奴隶说给我自上次请求以来的所有更改。对于相当大的数据库,这比您选择的任何替代方案都要高效得多。它只需要适度的成本。
对于架构更改,我认为主机会记录alter
信息,因此从站也可以复制这些信息。该机制肯定会复制drop table ... if exists
和create table ... select
,因此alter
逻辑上应该遵循,但我还没有尝试过。