2012-02-05 77 views
1

我有一個遠程MySQL數據庫的只讀訪問,其中包含一個非常大的表(數億行)。從遠程複製一個巨大的MySQL表到本地數據庫

爲了更快地訪問該表,我想將它複製到我的本地數據庫。

這樣做的最好方法是什麼?

SELECT INTO OUTFILE」不起作用,因爲我沒有遠程數據庫所需的權限。

我試圖用Java來SELECT所有行FROM遠程表,將它們保存到本地文本文件,然後使用LOAD DATA INFILE;然而,選擇與

"Exception in thread "main" java.lang.OutOfMemoryError: Java heap space".

+1

**定義大**,媽媽和流行開發店裏的某個人可能會認爲大的可能不是什麼人在谷歌或Facebook認爲大。 – 2012-02-05 06:35:27

+0

您有可能將INOUT OUTFILE'...'選擇到您有權限的目錄中嗎? – tofutim 2012-02-05 06:35:55

+0

「定義大」 - 正如我所說的那樣,它足夠大以至於Java打破了「OutOfMemoryError」。那就是幾億行。 – 2012-02-05 10:08:57

回答

1

使用打破了mysqldump命令遠程數據庫提取所需數據庫的SQL語句。然後將提取的文件複製到本地系統並執行將在本地系統中創建數據庫的sql文件。

這裏是mysqldump的例子 http://www.roseindia.net/tutorial/mysql/mysqlbackup/mysqldump.html

+0

好的,但我沒有權限鎖定遠程數據庫中的表,因此我必須使用此解決方案: http://stackoverflow.com/questions/104612/run-mysqldump-without-locking-tables 我運行的命令是:「mysqldump --single-transaction -h [遠程主機] -P [遠程端口] -u [遠程只讀用戶名] [遠程數據庫名稱] [remote-table-名稱] | mysql -u [本地用戶名] -p [本地密碼] [本地數據庫]「 – 2012-02-05 08:15:41

+0

好吧,幾個小時後,它壞了,報告說磁盤已滿...... – 2012-02-05 14:00:22

1

嘗試設置同步,的phpMyAdmin最新版本提供了一個選項來設置同步。您需要將源數據庫設置爲遠程數據庫和目標數據庫。
在本地機器上設置PHP(和PHPMyAdmin)也不是一件大事。如果表格更大,則可能需要增加phpmyadmin腳本的最大執行時間。
或者,如果您可以訪問遠程MySQL端口,那麼您可以嘗試從本地計算機連接到遠程數據庫,如mysql -h remote_IP -u usernmae -pPassword。如果它連接,那麼你肯定可以在本地機器上使用mysqldump命令。檢查這個link

1

Java程序的問題很可能是因爲默認情況下MySQL JDBC驅動程序將整個ResultSet存儲在內存中。對於大表,這很可能會導致OutOfMemoryError。

您可以按照this page in the MySQL documentation(我通過this blog post找到)的ResultSet部分中的說明來停止MySQL驅動程序的操作。

我用一個簡單的Java程序就可以重現OutOfMemoryError,該程序只讀取超過1.2億行的表中的每一行。完成MySQL文檔中建議的更改後,我的Java程序完成而沒有任何內存問題。

相關問題