我对远程MySQL数据库具有只读权限,该数据库包含一个非常大的表(数亿行)。
为了更快地访问该表,我想将其复制到我的本地数据库。
这样做的最佳方式是什么?
" SELECT INTO OUTFILE
"不起作用,因为我没有远程数据库所需的权限。
我尝试使用Java SELECT
远程表的所有行FROM
,将它们保存到本地文本文件,然后使用LOAD DATA INFILE;
但是,选择中断了
"线程中的异常" main" java.lang.OutOfMemoryError:Java堆空间"。
答案 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程序完成后没有任何内存问题。