Назад | Перейти на главную страницу

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

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

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

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

Перед завершением работы mysql вам необходимо запустить SET GLOBAL innodb_fast_shutdown = 0;. Зачем?

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

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

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.

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