将一个巨大的MySQL表从远程复制到本地数据库

时间:2012-02-05 06:33:26

标签: java mysql

我对远程MySQL数据库具有只读权限,该数据库包含一个非常大的表(数亿行)。

为了更快地访问该表,我想将其复制到我的本地数据库。

这样做的最佳方式是什么?

" SELECT INTO OUTFILE"不起作用,因为我没有远程数据库所需的权限。

我尝试使用Java SELECT远程表的所有行FROM,将它们保存到本地文本文件,然后使用LOAD DATA INFILE;但是,选择中断了

  

"线程中的异常" main" java.lang.OutOfMemoryError:Java堆空间"。

3 个答案:

答案 0 :(得分:1)

使用远程数据库上的mysqldump命令提取所需数据库的SQL语句。然后将提取的文件复制到本地系统并执行sql文件,该文件将在本地系统中创建数据库。

这是mysqldump示例 http://www.roseindia.net/tutorial/mysql/mysqlbackup/mysqldump.html

答案 1 :(得分:1)

尝试设置同步,最新版本的PHPMyAdmin提供了设置同步的选项。您需要将源DB设置为远程数据库,并将目标设置为本地数据库 在本地计算机上设置PHP(以及PHPMyAdmin)也不是一项大任务。如果表格大得多,则可能需要增加phpmyadmin脚本的最长执行时间 或者,如果您可以访问远程MySQL端口,则可以尝试从本地计算机连接到远程数据库mysql -h remote_IP -u usernmae -pPassword。如果它连接,那么你肯定可以在本地机器上使用mysqldump命令。检查此link

答案 2 :(得分:1)

Java程序的问题可能是因为MySQL JDBC驱动程序默认将整个ResultSet存储在内存中。使用庞大的表,这很可能导致OutOfMemoryError。

您可以按照this page in the MySQL documentation的ResultSet部分(我通过this blog post找到的)中的说明停止MySQL驱动程序执行此操作。

我能够使用一个简单的Java程序重现OutOfMemoryError,该程序只读取超过1.2亿行的表中的每一行。在MySQL文档中建议进行更改后,我的Java程序完成后没有任何内存问题。