MySQL INSERT SELECT在大型静态​​表上

时间:2012-08-14 05:57:48

标签: mysql sql

我需要将一个表的内容复制到另一个表。所以我开始使用:

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 个答案:

答案 0 :(得分:2)

数据迁移是少数情况之一,CURSOR可以理解,正如您所说,确保锁的数量保持清醒。

将光标与TRANSACTION结合使用,在每行之后提交,或在N行之后提交(例如使用带模数的计数器)

答案 1 :(得分:0)

从innodb中选择数据到outfile并加载infile 群集