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