首页 文章

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

提问于
浏览
1

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

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

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

有帮助吗?

2 回答

  • 2

    两步就足够了吗?

    (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
    
  • 1

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

相关问题