19.4.4 Использование репликации с разными движками хранения исходной и реплицированной таблиц
Для процесса репликации не имеет значения, используют ли исходная таблица на источнике и реплицированная таблица на реплике разные типы движков хранения. Фактически, системная переменная default_storage_engine не реплицируется.
Это предоставляет ряд преимуществ в процессе репликации, так как вы можете использовать разные типы движков для различных сценариев репликации. Например, в типичном сценарии масштабирования (см. Раздел 19.4.5, «Использование репликации для масштабирования»), вы хотите использовать InnoDB таблицы на источнике для использования транзакционной функциональности, но использовать MyISAM на репликах, где поддержка транзакций не требуется, потому что данные только читаются. При использовании репликации в среде ведения журнала данных вы можете использовать движок хранения Archive на реплике.
Настройка разных движков на источнике и реплике зависит от того, как вы настраиваете начальный процесс репликации:
-
Если вы использовали mysqldump для создания моментального снимка базы данных на вашем источнике, вы могли бы отредактировать текстовый файл дампа, чтобы изменить тип движка, используемый для каждой таблицы.
Еще один вариант для mysqldump — отключить типы движков, которые вы не хотите использовать на реплике, прежде чем использовать дамп для построения данных на реплике. Например, вы можете добавить опцию
--skip-federatedна вашей реплике, чтобы отключить движокFEDERATED. Если для таблицы, которая должна быть создана, конкретный движок не существует, MySQL использует тип движка по умолчанию, обычноInnoDB. (Это требует, чтобы режим SQLNO_ENGINE_SUBSTITUTIONне был включен.) Если вы хотите отключить дополнительные движки таким образом, вы можете рассмотреть возможность создания специальной бинарной программы, которая будет использоваться на реплике и поддерживать только необходимые вам движки. Если вы используете файлы данных в сыром виде (бинарная резервная копия) для настройки реплики, то изменить начальный формат таблицы невозможно. Вместо этого используйте
ALTER TABLE, чтобы изменить типы таблиц после запуска реплики.При настройке репликации нового источника/реплики, где на источнике пока нет таблиц, избегайте указания типа движка при создании новых таблиц.
Если вы уже используете решение для репликации и хотите преобразовать ваши существующие таблицы в другой тип движка, выполните следующие действия:
-
Остановите реплику от выполнения обновлений репликации:
mysql>
STOP REPLICA;Это позволяет изменить типы движков без прерывания.
Выполните
ALTER TABLE ... ENGINE='для каждой таблицы, которую нужно изменить.engine_type'-
Запустите процесс репликации снова:
mysql>
START REPLICA;
Хотя переменная default_storage_engine не реплицируется, имейте в виду, что операторы CREATE
TABLE и ALTER TABLE, которые включают указание движка, корректно реплицируются на реплику. Если в случае таблицы CSV вы выполните этот оператор:
mysql> ALTER TABLE csvtable ENGINE='MyISAM';
Этот оператор реплицируется; тип движка таблицы на реплике преобразуется в InnoDB, даже если вы ранее изменили тип таблицы на реплике на другой движок, кроме CSV. Если вы хотите сохранить различия в движках на источнике и реплике, следует быть осторожным при использовании переменной default_storage_engine на источнике при создании новой таблицы. Например, вместо:
mysql> CREATE TABLE tablea (columna int) Engine=MyISAM;
Используйте этот формат:
mysql> SET default_storage_engine=MyISAM;
mysql> CREATE TABLE tablea (columna int);
При репликации переменная default_storage_engine игнорируется, и оператор CREATE TABLE выполняется на реплике, используя движок по умолчанию реплики.
© 2025 Oracle
Licensed under the GPLv2 License.