0

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

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。

4

2 回答 2

2

正如您所说,数据迁移是CURSOR有意义的少数实例之一,可确保锁的数量保持正常。

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

于 2012-08-14T06:01:32.340 回答
0

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

于 2012-08-14T06:10:33.330 回答