Innodb один файл на табличное пространство

Я иду в среду, которая использует MySQL и Innodb в качестве механизма хранения. Я хотел бы включить innodb_file_per_table для повышения производительности. Учитывая, что все базы данных / таблицы в настоящее время хранятся в файле ibdata1/default ibdata, будет ли опция innodb_file_per_table влиять только на новые таблицы, созданные после того, как я установил эту директиву?

Каков наилучший способ взять существующую базу данных и разбить каждую таблицу на собственный ibd-файл? Должен ли я сбросить / восстановить все таблицы, чтобы это произошло?

2 ответа

Решение

http://dev.mysql.com/doc/refman/5.0/en/innodb-multiple-tablespaces.html:

The --innodb_file_per_table option affects only table creation, not access to 
existing tables. If you start the server with this option, new tables are 
created using .ibd  files, but you can still access tables that exist in the 
shared tablespace. If you start the server without this option, new tables are 
created in the shared tablespace, but you can still access any tables that were
created using multiple tablespaces.

И да, дамп и восстановление необходимы для перемещения существующих таблиц в свои собственные файлы.

Я согласен с ответами и комментариями @faker (+1 за его ответ), но есть еще одна важная вещь:

Перед тем как выключить MySQL, вам нужно запустить SET GLOBAL innodb_fast_shutdown = 0;, Зачем?

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

Вот мой пост в StackOverflow, как это сделать: https://stackoverflow.com/a/4056261/491757

Другие вопросы по тегам