如何将所有InnoDB表转换为MyISAM?

3

大家好,我正在寻找一种方法(SQL代码),可以将我的WordPress数据库中的所有InnoDB转换为MyISAM。

目前我的代码是:

SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME,' ENGINE=MyISAM;') FROM Information_schema.TABLES WHERE ENGINE = 'InnoDB'

这让我回到了原点:
ALTER TABLE db.wp_comments ENGINE=MyISAM;
ALTER TABLE db.wp_links ENGINE=MyISAM;
ALTER TABLE db.wp_options ENGINE=MyISAM;
ALTER TABLE db.wp_postmeta ENGINE=MyISAM;
ALTER TABLE db.wp_posts ENGINE=MyISAM;
ALTER TABLE db.wp_term_relationships ENGINE=MyISAM;
ALTER TABLE db.wp_term_taxonomy ENGINE=MyISAM;
ALTER TABLE db.wp_termmeta ENGINE=MyISAM;
ALTER TABLE db.wp_terms ENGINE=MyISAM;
ALTER TABLE db.wp_usermeta ENGINE=MyISAM;
ALTER TABLE db.wp_users ENGINE=MyISAM;

现在我想一次执行所有行,希望将所有结果保存在一个变量中并执行它们。但是 SQL 变量只能保存一行...如何使用普通的 SQL 代码一次执行所有这些行?
提前致谢。
P.S.: 我可以使用“Update”来解决这个问题吗?因为更新可能会将引擎更新为 MyISAM?
3个回答

5

我刚测试了另一种(简单?)的方法,对我有效。

只需将您的数据库导出为.sql文件,并使用gedit或notepad进行编辑;

将“ENGINE = INNODB”替换为“ENGINE = MyISAM”,然后保存编辑过的文件

替换完成的数量应该是您的表格的数量

将其导入到MySQL(phpMyAdmin或命令行)中

就这样!


1

备份MySQL数据库。 通过终端运行此SQL查询,针对您希望转换为MYISAM的数据库。

mysql -h databasehostname -u username -p -e "SELECT concat('ALTER TABLE ', TABLE_NAME,' ENGINE=MYISAM;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE'" | tail -n+2 >> alter.sql

注意:将“db_name”更改为您实际的数据库名称

注意:仅在您登录到终端的计算机上没有本地数据库时才需要使用-h标志

将该alter.sql文件导入INNODB数据库

mysql -h databasehostname -u username -p databasename < alter.sql

我不知道你如何在phpmyadmin中运行它,但终端工作得非常好。 - pathfinder

0

为什么?MyISAM在下一个MySQL版本中将被淘汰。MyISAM效率低,鲁棒性差等等。

以下是如何执行ALTERs的方法:

  1. 将更改语句生成到文件或屏幕上。(您已经完成了这一步。)

  2. 将它们复制(或输入)到mysql命令行工具中。

  3. 去喝杯咖啡。

但要注意错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接