最近,我们在数据库服务器上升级了 MySQL 版本,几乎所有的表都在 MyISAM 中,但在 my.ini 中我们设置了
--default-storage-engine=InnoDB
但现在我们想将此设置更改为 MyISAM,因为以前我们使用 MyISAM 作为默认引擎
--default-storage-engine=MyISAM
动态更改默认存储引擎是一种好的做法吗?这样可行吗?即使可行,是否会出现重大性能问题?
这是我们使用该数据库的遗留应用程序,这就是为什么几乎所有的表都使用数据库管理系统引擎。我们没有在应用程序的任何地方使用 DB 事务。
MySQL 版本:8.0 操作系统:Windows Server
答案1
更改默认存储引擎只会影响使用CREATE TABLE
语句创建的新表,而无需指定数据库引擎。
因此,除非您计划创建新表,否则配置文件中的设置没有区别。
答案2
如果可以同时运行多个查询(例如多用户环境),那么您应该计划将所有表迁移到 InnoDB。我还会在 Linux 机器上运行 MySQL。
要更改引擎,您应该使用 mysqldump 导出数据库,然后在转储中更改引擎并将其导入回来。您还可以ALTER TABLE mytable ENGINE=InnoDB;
对架构的每个表使用。不要更改mysql
架构的数据库引擎。
答案3
MyISAM 没有事务 ACID 属性。我会改用 InnoBD。我可能搞错了。
答案4
default_storage_engine
仅适用于新创建的表。也就是说,更改设置不会更改现有表。
要实际更改表,请使用ALTER TABLE name ENGINE=engine
(对于每个表)。
在转换之前和转换之后执行以下任一操作以确保转换已发生:
SHOW TABLE STATUS; -- has a column for "engine"
SHOW CREATE TABLE name; -- shows the engine= clause at the end
也许在 InnoDB 中唯一可能明显变慢的任务是
SELECT COUNT(*) FROM name;
没有WHERE
子句。你经常使用吗?我们可以讨论解决方法。对于你发现速度较慢的任何其他查询也是如此。
我强烈建议您在 InnoDB 从 MySQL 中删除之前迁移到它。迁移问题: http://mysql.rjweb.org/doc.php/myisam2innodb