【发布时间】:2015-05-26 09:12:12
【问题描述】:
无法回答我的问题的类似问题: copy data from a mysql database to other mysql database with java 和 Copy a huge MySQL table from a remote to a local database
我的问题:我有一个远程 mysql 数据库,我只有 mysql 读取权限,无法访问服务器。那是源数据库。我有另一个 mysql 数据库,我可以同时访问服务器和 mysql。可以说它是目标数据库。两个目标数据库都有一个与源数据库中的表结构重复的表。为了使问题简单化,假设只有新数据被添加到源表中。该表有一个名为“lastModificationTime”的字段,其中包含上次修改(插入)的行的时间戳。基于该字段,使用 java 应用程序,我必须从需要插入到目标数据库表的源表中提取行以同步它们。最初,目标表是空的,源表大小几乎是 3 GB。当我的 java 应用程序尝试从远程表中选择所有行并出现异常时,这会导致问题。异常是 java.sql.SQLException: Communication link failure:... bla bla ...
*注意:我使用 jdbc 连接到这两个数据库。 *注意:如果由于表大小接近 3GB 而没有发生“通信链路故障”,也有可能发生 OutOfMemoryException。
提前致谢。
【问题讨论】:
-
在一个事务中,尝试从源表中读取
COUNT,然后遍历源表,一次处理 1000 条记录。 -
谢谢。我已经根据您的想法提出了解决方案。我首先读取源表中“lastModificationTime”大于目标表中“lastModificationTime”的行数。然后使用“select ... ... from ... where lastModificationTime> some_value order by lastModificationTime limit a,b”之类的查询迭代从源表中读取行块。然后在目标表中插入这些行。再次感谢您的回复。