前言

这个问题是在Halo 社区遇到的。

查看当前使用的存储引擎

方法一:查看表的存储引擎

可以通过以下 SQL 语句查看某个表的存储引擎:

SHOW TABLE STATUS WHERE Name = 'table_name';
  • 说明:将 table_name 替换为实际表名。结果中的 Engine 列显示当前使用的存储引擎(如 InnoDB、MyISAM)。

方法二:查看全局默认存储引擎

执行以下命令查看 MySQL 服务器默认的存储引擎:

SHOW VARIABLES LIKE 'default_storage_engine';
  • 说明:结果中的 Value 列显示当前默认的存储引擎。

查看支持的存储引擎

使用以下命令列出 MySQL 支持的所有存储引擎:

SHOW ENGINES;
  • 说明

    • Engine 列:显示存储引擎名称(如 InnoDB、MyISAM、MEMORY 等)。

    • Support 列:显示是否支持该引擎(YES 表示支持,DEFAULT 表示当前默认引擎)。

    • 其他列(如 CommentTransactionsXASavepoints)提供引擎的特性信息。

切换存储引擎

方法一:更改现有表的存储引擎

使用 ALTER TABLE 语句更改表的存储引擎:

ALTER TABLE table_name ENGINE = engine_name;
  • 示例:将 users 表的存储引擎更改为 InnoDB:

    ALTER TABLE users ENGINE = InnoDB;
    
  • 注意

    • 替换 table_name 为实际表名,engine_name 为目标引擎(如 InnoDB、MyISAM)。

    • 切换引擎可能需要时间,尤其是数据量大的表。

    • 确保目标引擎支持表的结构(如外键、索引等)。例如,MyISAM 不支持外键。

方法二:设置全局默认存储引擎

修改 MySQL 配置文件或通过 SQL 语句设置默认存储引擎:

通过 SQL 设置(临时,当前会话有效)

SET GLOBAL default_storage_engine = engine_name;
  • 示例:设置默认引擎为 MyISAM:

    SET GLOBAL default_storage_engine = MyISAM;
    

通过配置文件设置(永久,重启后生效)

  1. 打开 MySQL 配置文件(通常为 my.cnfmy.ini,路径可能在 /etc/mysql/ 或其他目录)。

  2. [mysqld] 部分添加或修改以下行:

    [mysqld]
    default_storage_engine = engine_name
    
  3. 保存文件并重启 MySQL 服务:

    sudo service mysql restart
    
  • 注意:配置文件路径因操作系统和 MySQL 版本而异,需确认具体路径。

注意事项

  • 兼容性:不同存储引擎支持的功能不同(如 InnoDB 支持事务和外键,MyISAM 不支持)。

  • 备份:切换引擎前建议备份数据,以防数据丢失或不兼容。

  • 性能:根据应用场景选择合适的引擎(如 InnoDB 适合事务处理,MyISAM 适合读多写少)。

  • 版本差异:不同 MySQL 版本可能支持的引擎不同,建议参考官方文档确认。