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


dump selected data from one db to another in mysql

情况如下:

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

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

这个过程每天运行一次。

我看到的选项:

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

  2. 截断localhost表。在PHP中的远程数据库上运行SELECT查询,只检索所需的字段,而不是整行。然后对结果进行循环,并根据这些数据创建INSERT语句。

我的问题:

  • 性能方面,哪一个是我的最佳选择
  • 哪一个完成得最快
  • 会给服务器增加更大的负载吗
  • 将索引表在两个选项中花费的时间相同

如果没有充分的理由让本地d/b成为远程的子集,请使结构相同,并在所需的表上启用数据库复制。复制的工作原理是,主设备跟踪所做的所有更改,并管理每个从属d/b指向更改的指针。每个奴隶都说给我自上次请求以来的所有更改。对于一个相当大的数据库,这比您选择的任何替代方案都要高效得多。它的成本很低。

至于模式更改,我认为alter信息是由主服务器记录的,所以从服务器也可以复制这些信息。该机制肯定复制了drop table ... if existscreate table ... select,所以alter在逻辑上应该遵循,但我没有尝试过


这里是:确认alter已正确复制。

相关文章: