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