Недавно мы обновили версию MySQL на сервере базы данных. Почти все наши таблицы находятся в MyISAM, но в my.ini мы установили
--default-storage-engine=InnoDB
Но теперь мы хотим изменить этот параметр на MyISAM, потому что раньше мы использовали MyISAM в качестве механизма по умолчанию.
--default-storage-engine=MyISAM
Является ли изменение механизма хранения по умолчанию на лету хорошей практикой? Это будет работать? Даже если это сработает, возникнут ли серьезные проблемы с производительностью?
Это устаревшее приложение, для которого мы используем эту базу данных, поэтому почти все таблицы используют MyISAM двигатель. Мы не используем транзакции БД в приложении.
Версия MySQL: 8.0 ОС: Windows Server
Если несколько запросов могут выполняться одновременно (например, многопользовательская среда), вам следует запланировать переход на InnoDB для всех таблиц. Я бы также запустил MySQL на машине Linux.
Чтобы изменить движок, вы должны экспортировать базу данных с помощью mysqldump, затем изменить движок в дампе и импортировать его обратно. Вы также можете использовать ALTER TABLE mytable ENGINE=InnoDB;
для каждой таблицы вашей схемы. Не меняйте движок БД для mysql
схема.
Изменение механизма хранения по умолчанию влияет только на новые таблицы, созданные с помощью CREATE TABLE
оператор без указания ядра базы данных.
Итак, если вы не планируете создавать новые таблицы, нет никакой разницы, какие настройки у вас есть в файле конфигурации.
MyISAM не имеет свойств ACID транзакции. Я бы перешел на InnoBD. Я могу ошибаться.
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