【发布时间】:2011-02-21 11:59:10
【问题描述】:
我想复制一个非常大的表,但我不想逐行复制它。有没有办法复制它?
例如,您可以在不删除行/行的情况下截断,所以我想知道是否有类似的东西可以复制整个表
更新:逐行插入非常痛苦(因为有 120M 行)。无论如何要避免这种情况?
【问题讨论】:
标签: mysql database duplicates
我想复制一个非常大的表,但我不想逐行复制它。有没有办法复制它?
例如,您可以在不删除行/行的情况下截断,所以我想知道是否有类似的东西可以复制整个表
更新:逐行插入非常痛苦(因为有 120M 行)。无论如何要避免这种情况?
【问题讨论】:
标签: mysql database duplicates
MySQL 不再具有可靠的“复制表”功能 - 造成这种情况的许多原因与数据的存储方式有关。但是,下面是逐行插入,但非常简单:
CREATE TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` (SELECT * FROM `old_table`);
【讨论】:
你可以使用INSERT INTO ... SELECT。
【讨论】:
如果您使用的是 MyISAM,您可以复制磁盘上的物理文件。重新启动服务,您将拥有带有索引的新表,并且一切都相同。
【讨论】:
INSERT INTO TABLE2 SELECT * FROM TABLE1
【讨论】:
复制一张大表并非易事;最终数据库可能需要重建它。
在 InnoDB 中,唯一的方法是真正重建它,这意味着 insert ... select 之类的,但是,由于它将在单个事务中发生 120M 行,您可能会超过回滚区域的大小,这将导致插入失败。
mysqldump 然后重命名原始表然后恢复转储应该可以工作,因为 mysqldump 可能会导致每隔很多行提交一次。不过会很慢。
【讨论】:
神谕:
创建表 t 作为 select * from original_table
【讨论】: