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

Change storage engine from MyISAM to InnoDB - all tables at once - USING phpmyadmin

我在 mysql 数据库中有大约 100 个 tables,并且都有存储引擎:MyISAM。我想立即将他们的存储引擎全部更改为 innoDB,但我不想使用:

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

  1. Laravel(Laravel & InnoDB)

  2. 一次table。(how to change storage engine of database in phpmyadmin?)

  3. SQL查询.(How to change table storage engine from MyISAM to InnoDB)

  4. 通过xampp或类似的方式。 (How to set the default storage engine to InnoDB in XAMPP )

所以我想更改:所有 TABLE 一次存储引擎 使用 phpmyadmin 界面。

有什么帮助吗?

2 个步骤够吗?

(1) 运行 SELECT 反对 information_schema,如其中一些链接所示。但是让它输出 100 fully-formed ALTER statements.

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 的约束。小 tables 会很快完成,留下大 tables 来延长时间。

输出样本:

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 个 table,当您再次 运行 查询时,它们将不会被包括在内。只包括新的 25 个。

不,您不能 "automatically" 将任何新的 table 更改为不同的引擎。然而...

通过在 my.cnf 中这样说,您可以将所有未明确指定 ENGINE 的新 table 设为 InnoDB :

[mysqld]
default_storage_engine = InnoDB

我在 https://github.com/phpmyadmin/phpmyadmin/issues/12893

打开了一个关于此的功能请求