我需要将一个大的(8000 万条记录)MySQL 表复制到另一个表中,因为我需要向表中添加索引并且使用 ALTER 会太慢/内存不足。
我尝试在屏幕实例中运行包含 INSERT INTO table2 SELECT * FROM table1 的 MySQL 脚本,以便我可以分离并退出 SSH 会话,但由于某种原因,它完成了前 2000 万行(花了几个小时)然后它随机停止。这种方法需要大量内存吗?我还能如何在后台快速执行此操作?
我需要将一个大的(8000 万条记录)MySQL 表复制到另一个表中,因为我需要向表中添加索引并且使用 ALTER 会太慢/内存不足。
我尝试在屏幕实例中运行包含 INSERT INTO table2 SELECT * FROM table1 的 MySQL 脚本,以便我可以分离并退出 SSH 会话,但由于某种原因,它完成了前 2000 万行(花了几个小时)然后它随机停止。这种方法需要大量内存吗?我还能如何在后台快速执行此操作?
将表转储到 .csv 文件中
mysqldump -u [username] -p -t -T/path/to/directory/file.txt [database] [table] --fields-terminated-by=,
使用正确的架构创建一个新表
然后加载包含 .csv 数据的新表
LOAD DATA INFILE '/path/to/directory/file.txt' INTO TABLE database.new_table FIELDS TERMINATED BY ','
仅供参考:这些命令未经测试,可能需要一些调整,但你应该明白