将存储引擎从MyISAM更改为InnoDB - 所有表格一次 - 使用phpmyadmin

我在mysql数据库中有100个表,并且都有存储引擎:MyISAM . 我想立即将他们的存储引擎更改为innoDB,我不想使用:

1.PHP(How to convert all tables from MyISAM into InnoDB?

所以我想改变: ALL TABLE STORAGE ENGINE AT ONCEusing phpmyadmin 接口 .

有帮助吗?

回答(2)

2 years ago

两步就足够了吗?

(1)对 information_schema 运行 SELECT ,如其中一些链接所示 . 但它输出100个完整形成的 ALTER 语句 .

SELECT CONCAT("ALTER TABLE ", table_name, " ENGINE=InnoDB;
")
    FROM information_schema.tables
    WHERE engine='MyISAM'
      AND table_schema='MyDatabase'
      AND ...;

(2)将100行复制并粘贴到phpadmin中 . 去喝杯咖啡 . 或者花点时间阅读gotchas in converting,看看你是否会遇到一些问题 .

真正并行执行它们不太可能更快 - 您将受到I / O限制 . 小 table 将快速完成,无论如何都要让大 table 延长时间 .

输出样本:

SELECT CONCAT("ALTER TABLE ", table_name, " ENGINE=InnoDB;
")
    FROM information_schema.tables
    WHERE engine='MyISAM'
      AND table_schema='test';

产生类似的东西:

ALTER TABLE 07 ENGINE=InnoDB;\n
ALTER TABLE 597377b ENGINE=InnoDB;\n
ALTER TABLE adjprice ENGINE=InnoDB;\n
ALTER TABLE big ENGINE=InnoDB;\n
ALTER TABLE bigv ENGINE=InnoDB;\n
ALTER TABLE blobid ENGINE=InnoDB;\n
ALTER TABLE charlatin1 ENGINE=InnoDB;\n
ALTER TABLE collorder ENGINE=InnoDB;\n
ALTER TABLE collorder2 ENGINE=InnoDB;\n
ALTER TABLE countries ENGINE=InnoDB;\n
ALTER TABLE d1 ENGINE=InnoDB;\n

然后粘贴然后生成许多行返回到工具中 . 无需手动输入名称 .

如果您首先转换100个表,则在再次运行查询时将不会包括它们 . 只包括新的25 .

不,您不能“自动”将任何新表更改为其他引擎 . 然而...

通过在 my.cnf 中这样说,你可以拥有你没有明确指定 ENGINE 的所有新表是InnoDB:

[mysqld]
default_storage_engine = InnoDB

2 years ago

我在https://github.com/phpmyadmin/phpmyadmin/issues/12893打开了一个关于此的功能请求