Spec-Zone.ru › MySQL 5.7

14.6.3.1 Система табличного пространства

Система табличного пространства — это область хранения для InnoDB словаря данных, буфера двойной записи, буфера изменений и журналов отката. Она также может содержать данные таблиц и индексов, если таблицы созданы в системе табличного пространства, а не в пространстве таблиц на основе файла или общем пространстве таблиц.

Система табличного пространства может иметь один или несколько файлов данных. По умолчанию создается один файл данных системы табличного пространства с именем ibdata1 в каталоге данных. Размер и количество файлов данных системы табличного пространства определяется параметром запуска innodb_data_file_path. Сведения о конфигурации см. в разделе Конфигурация файла данных системы табличного пространства.

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

  • Изменение размера системы табличного пространства

  • Использование разделов физических дисков для системы табличного пространства

Изменение размера системы табличного пространства

В этом разделе описывается, как увеличить или уменьшить размер системы табличного пространства.

Увеличение размера системы табличного пространства

Самый простой способ увеличить размер системы табличного пространства — это настроить его для автоматического расширения. Для этого укажите атрибут autoextend для последнего файла данных в настройке innodb_data_file_path и перезапустите сервер. Например:

innodb_data_file_path=ibdata1:10M:autoextend

При указании атрибута autoextend размер файла данных автоматически увеличивается на 8 МБ при необходимости. Размер приращения регулируется переменной innodb_autoextend_increment.

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

  1. Остановите сервер MySQL.

  2. Если последний файл данных в настройке innodb_data_file_path определен с атрибутом autoextend, удалите его и измените атрибут размера так, чтобы он отражал текущий размер файла данных. Для определения соответствующего размера файла данных проверьте размер файла в файловой системе и округлите значение вниз до ближайшего значения в МБ (1 МБ = 1024 × 1024 байта).

  3. Добавьте новый файл данных к настройке innodb_data_file_path, необязательно указывая атрибут autoextend. Атрибут autoextend можно указать только для последнего файла данных в настройке innodb_data_file_path.

  4. Запустите сервер MySQL.

Например, это табличное пространство имеет один файл данных с автоматическим расширением:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

Предположим, что со временем размер файла данных увеличился до 988 МБ. Это значение настройки innodb_data_file_path после изменения атрибута размера, отражающего текущий размер файла данных, и после указания нового файла данных с автоматическим расширением размером 50 МБ:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

При добавлении нового файла данных не указывайте имя существующего файла. InnoDB создает и инициализирует новый файл данных при запуске сервера.

Примечание

Вы не можете увеличить размер существующего файла данных системы табличного пространства, изменив его атрибут размера. Например, изменение настройки innodb_data_file_path со значения ibdata1:10M:autoextend на ibdata1:12M:autoextend приведет к следующей ошибке при запуске сервера:

[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system
data file './ibdata1' is of a different size 640 pages (rounded down to MB) than
specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!

Ошибка указывает на то, что размер существующего файла данных (выраженный в страницах InnoDB) отличается от размера файла данных, указанного в файле конфигурации. Если вы столкнулись с этой ошибкой, восстановите предыдущее значение innodb_data_file_path и обратитесь к инструкциям по изменению размера системы табличного пространства.

Уменьшение размера системы табличного пространства InnoDB

Вы не можете удалить файл данных из системы табличного пространства. Для уменьшения размера системы табличного пространства используйте следующую процедуру:

  1. Используйте mysqldump для создания резервной копии всех ваших InnoDB таблиц, включая InnoDB таблицы, расположенные в схеме mysql. Определите InnoDB таблицы в схеме mysql, используя следующий запрос:

    mysql> SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mysql' and ENGINE='InnoDB';
    +---------------------------+
    | TABLE_NAME                |
    +---------------------------+
    | engine_cost               |
    | gtid_executed             |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | innodb_index_stats        |
    | innodb_table_stats        |
    | plugin                    |
    | server_cost               |
    | servers                   |
    | slave_master_info         |
    | slave_relay_log_info      |
    | slave_worker_info         |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    +---------------------------+
    
  2. Остановите сервер.

  3. Удалите все существующие файлы табличного пространства (*.ibd), включая файлы ibdata и ib_log. Не забудьте удалить файлы *.ibd для таблиц, расположенных в схеме mysql.

  4. Удалите все файлы .frm для InnoDB таблиц.

  5. Настройте файлы данных для нового табличного пространства. См. Конфигурация файла данных системы табличного пространства.

  6. Перезапустите сервер.

  7. Импортируйте файлы резервной копии.

Примечание

Если ваши базы данных используют только движок InnoDB, проще создать резервную копию всех баз данных, остановить сервер, удалить все базы данных и файлы журнала InnoDB, перезапустить сервер и импортировать файлы резервной копии.

Чтобы избежать создания большого табличного пространства системы, используйте табличные пространства на основе файла или общие табличные пространства для ваших данных. Табличные пространства на основе файла — это тип табличного пространства по умолчанию и подразумеваются при создании таблицы InnoDB. В отличие от системы табличного пространства, табличные пространства на основе файла возвращают дисковое пространство операционной системе при усечении или удалении. Дополнительную информацию см. в разделе Раздел 14.6.3.2, «Табличные пространства на основе файла». Общие табличные пространства — это многотабличные табличные пространства, которые также могут использоваться как альтернатива табличному пространству системы. См. Раздел 14.6.3.3, «Общие табличные пространства».

Использование разделов физических дисков для системы табличного пространства

Разделы физических дисков можно использовать в качестве файлов данных системы табличного пространства. Этот метод обеспечивает небуферизованный ввод-вывод на Windows и некоторых системах Linux и Unix без накладных расходов файловой системы. Проведите тесты с использованием и без использования разделов физических дисков, чтобы проверить, улучшается ли производительность вашей системы.

При использовании раздела физического диска убедитесь, что пользовательский идентификатор, под которым работает сервер MySQL, имеет права чтения и записи для этого раздела. Например, если сервер работает от имени пользователя mysql, раздел должен быть доступен для чтения и записи пользователем mysql. Если сервер запускается с параметром --memlock, сервер должен запускаться от имени пользователя root, поэтому раздел должен быть доступен для чтения и записи пользователем root.

Процедуры, описанные ниже, предполагают изменение файла параметров. Дополнительную информацию см. в разделе Раздел 4.2.2.2, «Использование файлов параметров».

Назначение раздела физического диска на системах Linux и Unix
  1. Для использования физического устройства для нового экземпляра сервера сначала подготовьте файл конфигурации, установив innodb_data_file_path с ключевым словом raw. Например:

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
    

    Размер раздела должен быть не меньше указанного значения. Обратите внимание, что 1 МБ в InnoDB — это 1024 × 1024 байта, в то время как в спецификациях дисков 1 МБ обычно означает 1 000 000 байт.

  2. Затем выполните первоначальную инициализацию сервера с помощью --initialize или --initialize-insecure. InnoDB обнаруживает ключевое слово raw и инициализирует новый раздел, а затем останавливает сервер.

  3. Теперь перезапустите сервер. InnoDB теперь позволяет вносить изменения.

Назначение раздела физического диска в Windows

В системах Windows те же шаги и соответствующие рекомендации, описанные для систем Linux и Unix, применяются, за исключением того, что настройка innodb_data_file_path несколько отличается в Windows. Например:

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=//./D::10Graw

//./ соответствует синтаксису Windows \\.\ для доступа к физическим дискам. В приведенном примере D: — это буква диска раздела.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-system-tablespace.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API