mysql - 如何将巨大的MyISAM表分块导出到InnoDB?

标签 mysql for-loop innodb myisam

我正在使用 MySQL Workbench 将一些巨大(数百万行)MyISAM 表更改为 InnoDB。我在克隆表后通过 ALTER TABLE...INSERT INTO othertable SELECT * FROM mytable 进行了尝试,但似乎表太大了。工作台退出并出现有关与服务器的连接丢失...的错误。

所以我想我可以编写一个 SQL 脚本,每 10000 个条目左右循环一次,并将 MyISAM 表的内容分块复制到 InnoDB 表。

由于似乎没有for循环SQL,我想知道是否有人建议如何实现这一点?

INSERT INTO `latest`.`AUTHORS` (author_id, author_name)
SELECT
`author_names`.`author_name_id`,
`author_names`.`name`
FROM `pubmap_latest`.`dblp_author_names`;

这是我想要分块运行的查询。 count(*)-查询返回 985330 行。

最佳答案

我将使用mysqldump(命令行工具)从旧表中导出数据,然后将其导入到新表中。像这样的东西:

mysqldump database table > file.sql

然后编辑表名称并在文件中键入:

mysql database < file.sql

关于mysql - 如何将巨大的MyISAM表分块导出到InnoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944073/

相关文章:

php - 如何在没有 foreach 循环的情况下有效地将子数组作为主数组?

MySQL 过程 - 内部 for 循环条件未产生正确的输出

mysql - 使用合并的行值创建 View

mysql - 连接多个 MySQL 表进行搜索。这是 MySQL View 的一个很好的用途吗?

mysql - mysql导入时自动生成的引号

java - 我的代码在 for 循环 "java.util.InputMismatchException"中输入字符串时显示错误?

php - 保留从下拉列表中动态选择的值,但提交后仍然可以看到列表

bash - 用于不包括某些 IP 的 IP 范围的循环

php - 是否可以配置 MySQL 日志记录,以便它只报告已回滚的查询?

innoDB 表的 MySQL 全文搜索解决方法