2012-08-14 61 views
0

我需要將一個表的內容複製到另一個表中。所以,我開始使用:大型靜態表上的MySQL INSERT SELECT

INSERT new_table SELECT * FROM old_table 

不過,我現在收到以下錯誤:

1297, "Got temporary error 233 'Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)' from NDBCLUSTER" 

我想我有一個瞭解爲什麼發生這種情況:我的表是巨大的,MySQL試圖採取及時快照(鎖定所有內容並使其中一筆大筆交易)。

但是,我的數據相當靜態,沒有其他併發會話會修改數據。我怎麼能告訴MySQL一次只複製一行,或者更小的塊,而不鎖定整個事物?

編輯說明:我已經知道我可以將整個表逐行讀入內存/文件/轉儲並回寫。我很想知道是否有簡單的方法(可能設置隔離級別?)。請注意,引擎是InnoDB。

回答

2

數據遷移是少數幾個例子之一,如您所說,CURSOR可以確保鎖的數量保持健全。

使用光標結合TRANSACTION,在這裏提交的每一行之後,或後N行(例如使用具有模數的計數器)

+0

謝謝。這聽起來很有趣。你可以提供一個示例SQL過程或命令我怎麼做? – 2012-08-14 06:22:22

0

選擇從innodb的所述數據轉換成OUTFILE和負載的infile到 簇