Для СУБД MySQL и MariaDB вы можете хранить данные следующими способами:
ibdata1
).Использование общего табличного пространства увеличивает риск фрагментации табличного пространства. Поскольку выполнить операцию SHRINK
невозможно, файл в общем табличном пространстве может занимать около 90% дискового пространства. Это отрицательно сказывается на производительности дисковой подсистемы. Поэтому стоит выбрать табличное пространство file-per-table.
В этой статье описывается, как переместить данные из общего табличного пространства в табличное пространство file-per-table. Если СУБД MySQL или MariaDB также используются другими приложениями, вам необходимо переместить базы данных этих приложений в табличное пространство file-per-table.
Рекомендуется выполнять перенос только в том случае, если вы используете СУБД MySQL или MariaDB для Сервера администрирования.
Перемещение данных из общего табличного пространства в табличное пространство file-per-table может увеличить нагрузку на дисковую подсистему.
Предварительные требования
Перед тем как начать, убедитесь в следующем:
Требуемое дисковое пространство составляет 150% от текущего общего размера баз данных (текущего размера файла ibdata1
).
Процесс
Чтобы переместить данные из общего табличного пространства в табличное пространство file-per-table:
fix_tablespace.sql
.Вы можете просмотреть скрипты fix_tablespace.sql
, перейдя по ссылкам:
Просмотреть скрипт для MySQL 5.7 и MariaDB 10.1+
Просмотреть скрипт для MySQL 8.0+
Не останавливайте выполнение скрипта.
Если ошибок СУБД не было, но вы прервали выполнение скрипта, либо запустите скрипт повторно, либо прекратите выполнение шагов этой процедуры, перезагрузите службу СУБД и восстановите данные Сервера администрирования из резервной копии.
[mysqld]
файла my.cnf установите для параметра innodb_file_per_table
значение 1
.Данные будут перемещены из общего табличного пространства в табличное пространство file-per-table:
В начало