用mysqldump设置不同的内存引擎

Set different memory engine with mysqldump

我想使用 mysqldump 复制我的 mysql 数据库。

我使用这个 unix 命令

mysqldump db1 | mysql db2

但是db1都是engine=myisam的表。我希望 db2 拥有所有带有 engine=memory 的表。

有没有人知道用一个命令执行此操作的方法?我不想调用 php/python 等脚本来更改 for 循环中的所有表。

谢谢

感谢 Marc B,我找到了这个解决方案。

mysqldump db1 > dump.sql && sed -i 's/ENGINE=MyISAM/ENGINE=MEMORY/g' dump.sql && mysql db2 < dump.sql && rm -rf dump.sql

通过使用整个字符串 'ENGINE=MyISAM' 我认为这永远不会产生问题。否则你可以使用 RandomSeed 的两步选项(稍作调整:--no-create-table 应该是--no-create-info):

mysqldump --no-data db1 > dump.sql && sed -i 's/ENGINE=MyISAM/ENGINE=MEMORY/g' dump.sql && mysql db2 < dump.sql && mysqldump --no-create-info db1 | mysql db2 && rm -rf dump.sql

如果您的数据中有可能存在 'ENGINE=MyISAM',则此两步法更为安全。但是,您的数据(在 db2 中)在执行命令时不可访问,因此这可能会导致大型数据库出现问题。

感谢您的意见。