我正在尋找將數百萬行表中的一些數據轉移到另一個表中。我面對的問題是:在大型MySQL表之間傳輸數據
- 我不能用數據轉儲,因爲我需要一個WHERE子句
- 我不能做一個簡單的
INSERT INTO ... SELECT ...
因爲把所有的行到一個臨時表崩潰服務器
所以我基本上認爲我應該做一個存儲過程或類似的東西,它一次需要100行,並將它們插入到另一個表中。
關於此問題的解決方案/最佳實踐的任何想法?
感謝,
我正在尋找將數百萬行表中的一些數據轉移到另一個表中。我面對的問題是:在大型MySQL表之間傳輸數據
INSERT INTO ... SELECT ...
因爲把所有的行到一個臨時表崩潰服務器所以我基本上認爲我應該做一個存儲過程或類似的東西,它一次需要100行,並將它們插入到另一個表中。
關於此問題的解決方案/最佳實踐的任何想法?
感謝,
你可以使用SELECT INTO OUTFILE:
SELECT * INTO OUTFILE 'backup.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM <tablename> WHERE <conditions> <Other Clause if required>
然後插入:
LOAD DATA INFILE 'backup.csv'
INTO TABLE <tablename>
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field1,field1,field2) etc
我試着在我們說話時嘗試。 backup.csv默認位於何處? – evilpenguin
沒關係,我在保存各個數據庫所有表的文件夾中找到它。 – evilpenguin
什麼是你的更新頻率。?
如果你不需要跟蹤更新,你可以使用限制。
Function ExecCommandInParts(ByVal sql As String, Optional ByVal Updater As Func(Of Integer, Integer) = Nothing) As Integer
Dim limit As Integer = 10000
Dim count As Integer = limit
While count = limit
count = ExecCommandWithTimeout(sql & " limit " & limit)
If Updater IsNot Nothing Then Updater(count)
End While
End Function
SQL = SQL查詢來運行(INSERT ... SELECT,刪除...) 更新=委託更新來電者:我在過去的函數(VB.net)是等到行= 0寫道:對象/用戶命令的狀態是什麼...
ExecCommandWithTimeout =執行SQL的函數,並等待500毫秒。
測試在重型生產服務器,工程。
如何爲本單元任務編寫一些外部程序? updt:它在一臺服務器和一個數據庫中? – triclosan
您可以嘗試使用[SQLyog](http://webyog.com/en/downloads.php)。有一個30天的試用版,你可以下載。 SQLyog有一個數據同步嚮導,它可以幫助你完成你正在嘗試的任務(沒有真正編寫任何代碼)。 –
mysqldump允許使用WHERE,看看--where選項 - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.hts.html – Devart