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

Posted

技术标签:

【中文标题】将存储引擎从 MyISAM 更改为 InnoDB - 一次所有表 - 使用 phpmyadmin【英文标题】:Change storage engine from MyISAM to InnoDB - all tables at once - USING phpmyadmin 【发布时间】:2017-05-28 15:43:20 【问题描述】:

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

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

    Laravel(Laravel & InnoDB)

    一次一张桌子。(how to change storage engine of database in phpmyadmin?)

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

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

所以我想更改:ALL TABLE STORAGE ENGINE AT ONCE使用 phpmyadmin 界面。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

两步就够了吗?

(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 限制。而且小桌会很快完成,让大桌延长时间。

输出样本:

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

【讨论】:

感谢您的回答和努力,但您的方式实际上与使用查询相同:(***.com/questions/7455480/…) ..... 如果表数从 100 增加到 125,那么我将不得不再次添加 25查询行...我正在寻找其他方法来解决我的问题,而不管表的数量。 我的方法是两步,不管表的数量。我在答案中添加了SELECT;尝试步骤(1)以了解我的意思。 (根据需要修复AND 之后。) 我从一开始就理解你的逻辑。如果这 25 个新表的表号从 100 增加到 125,我将不得不在步骤 1 中修改您的查询(添加它们的名称,因此为它们添加 ALTER stmt)。我所说的“与表数无关”的意思是,我想在 phpmyadmin 界面中获得某种方式,例如选择所有表,然后以某种方式更改它们的存储引擎MyISAM 立即到 innoDB。就像我们可以为一张桌子做的一样,但要一次性完成。我希望我解决了我的问题。 我在答案中添加了更多内容。如果不清楚,也许其他人可以解释我们中的哪些人“无法沟通”。 我的错,到目前为止,您的答案似乎是最好的,也是唯一的一个。感谢您的帮助和解释。 +1 并接受。 PS。在第 1 步运行查询后...单击:选项->全文->转到,在结果页面中,因为默认情况下它显示部分文本,稍后在第 2 步运行查询时会导致错误。【参考方案2】:

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

【讨论】:

谢谢,但到目前为止还没有运气:)

以上是关于将存储引擎从 MyISAM 更改为 InnoDB - 一次所有表 - 使用 phpmyadmin的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL企业常用架构与调优经验分享

MYSQL企业常用架构与调优经验分享

MySQL 存储引擎 从Myiam 转innodb 的好处

MySQL 两种存储引擎:MyISAM与InnoDB对比及理解

哪个 MySQL 数据库引擎更适合存储会话和会话数据:MyISAM 还是 InnoDB?

MySql - 将 InnoDB 转换为数据库的 MyISAM 存储引擎