我需要将一个表的内容复制到另一个表。所以我开始使用:
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。
答案 0 :(得分:2)
数据迁移是少数情况之一,CURSOR可以理解,正如您所说,确保锁的数量保持清醒。
将光标与TRANSACTION结合使用,在每行之后提交,或在N行之后提交(例如使用带模数的计数器)
答案 1 :(得分:0)
从innodb中选择数据到outfile并加载infile 群集