Mysql 如何将所有InnoDB表转换为MyISAM?
大家好,我正在寻找一种方法(sql代码),我可以用它将WordpressDB中的所有InnoDB转换为MyISAM 我现在的代码是:Mysql 如何将所有InnoDB表转换为MyISAM?,mysql,sql,innodb,myisam,Mysql,Sql,Innodb,Myisam,大家好,我正在寻找一种方法(sql代码),我可以用它将WordpressDB中的所有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
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代码一次执行所有这些行
提前谢谢
注意:我可以使用“更新”来解决这个问题,因为更新可以将引擎更新到MyISAM吗?为什么?MyISAM将在MySQL的下一个版本中退出。MyISAM效率较低,不太健壮,等等 以下是如何进行
更改:
将alter语句生成到文件或屏幕中。(你已经做到了。)
将它们复制(或馈送)到mysql命令行工具中
去喝杯咖啡
但是要注意错误。刚刚测试了另一种(简单的?)方法,对我有效
只需将DB导出为.sql文件,用gedit或记事本编辑即可
将“ENGINE=INNODB”替换为“ENGINE=MyISAM”,并保存已编辑的文件
完成的数量或替换应为表的数量
将其导入MySQL(phpMyAdmin或命令行)
瞧 备份Mysql数据库。
通过终端或在phpmyadmin中为要转换为MYISAM的数据库运行此sql查询
mysql -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
注意:将“数据库名称”更改为您的实际数据库名称
将该alter.sql文件导入INNODB数据库