Конвертация баз из MyISAM в InnoDB, а также включение опции innodb_file_per_table и автоматическое пересоздание файлов таблиц.

Для того, чтобы проверить и оптимизировать сразу все базы MySQL выполните следующее

mysqlcheck -o --all-databases

В зависимости от конфигурации сервера, скрипт может запросить пароль от mysql, в крайнем случае выполните от рута - должно сработать.

Разумеется, рекомендую запускать это действо на сервере без нагрузки. Также можете поиграться с другими ключами, можно например скопом проверить базы и оптимизировать только те, которые необходимо и т.д.

Пересоздание .ibd файлов баз InnoDB (при переходе на innodb_file_per_table)

При переходе на InnoDB с включенной опцией innodb_file_per_table иногда возникает подобная ситуация,- вы уже конвертировали все базы в InnoDB, но например забыли включить опцию innodb_file_per_table или решили что перейти на этот тип хранения таблиц только сейчас.

По умолчанию, InnoDB использует общее хранилище для всех таблиц и индексов. Опция innodb_file_per_table позволяет создавать на каждую таблицу свой .ibd файл. Так же бывают определенные таблицы, в которые очень часто пишутся и удаляются данные. Это серьезно фрагментирует общее хранилище таблиц и от этого может пострадать производительность других таблиц. В этом случае имеет смысл разбивать общее хранилище на отдельные куски для каждой таблицы.

Если у вас таблицы уже созданы в общем хранилище и вы перезагружаете сервер MySQL с этой опцией, старые таблицы останутся в общем хранилище, а новые будут создаваться в отдельных хранилищах. Таким образом, чтобы поместить старые таблицы в раздельные файлы, нужно их пересоздать или перезаливать базу из бекапа. Альтернативой может служить выполнение alter table tablica engine=InnoDB; для всех таблиц, которые вы хотите пересоздать.

Что делать если таблиц много

Оптимизировать! Дело в том, что при оптимизации InnoDB таблиц пере создаются. Так что не нужно будет повторно выполнять alter table или тем паче перезаливать базу.

При выполнении mysqlcheck -o --all-databases Не пугайтесь варнингов типа: note : Table does not support optimize, doing recreate + analyze instead

Это как раз говорит о том, что базу пришлось пересоздавать.

Кстати, если переходите на InnoDB — рекомендую сборку от Percona.

Удачи в оптимизации MySQL :)