Реплики только для чтения
Распространённая настройка репликации заключается в том, чтобы реплики были только для чтения, чтобы никто случайно их не обновил. Если у реплики включена логирование бинарных событий и используется gtid_strict_mode, любые изменения, вызывающие изменения в бинарном журнале, остановят репликацию.
Когда переменная read_only установлена в 1, обновления разрешены только для пользователей с привилегией SUPER (<= MariaDB 10.5.1) или привилегией READ ONLY ADMIN (>= MariaDB 10.5.2), или для серверов репликации, выполняющих обновление с основного сервера. Вставка строк в таблицы журналов, обновления временных таблиц и OPTIMIZE TABLE или ANALYZE TABLE запросы к временным таблицам исключены из этого ограничения.
Если read_only установлено в 1, то SET PASSWORD доступно только пользователям с привилегией SUPER (<= MariaDB 10.5.1) или привилегией READ ONLY ADMIN (>= MariaDB 10.5.2).
Попытка установить переменную read_only в значение 1 завершится ошибкой, если в текущем сеансе есть блокировки таблиц или ожидающие транзакции.
Запрос будет ожидать другие сеансы, удерживающие блокировки таблиц. Пока происходит ожидание установки read_only, другие запросы на блокировки таблиц или транзакции также будут ожидать, пока read_only не будет установлено.
Начиная с MariaDB 10.3.19, некоторые проблемы, связанные с репликами только для чтения, были устранены:
- CREATE, DROP, ALTER, INSERT и DELETE временных таблиц не регистрируются в бинарном журнале, даже в режиме записей или смешанном режиме. В более ранних версиях MariaDB проблему с временными таблицами можно избежать, используя binlog_format=ROW, в этом случае временные таблицы никогда не регистрируются.
- Изменения в временных таблицах, созданных во время
read_only, не будут регистрироваться даже после отключения режимаread_only(например, если реплика была повышена до основного сервера). - Административные запросы ANALYZE, CHECK, OPTIMIZE и REPAIR не будут регистрироваться в бинарном журнале при режиме только для чтения.
Старые версии MariaDB
Если вы используете старую версию MariaDB с репликами только для чтения и включенным бинарным журналированием на реплике, и вам нужно внести изменения, но не хотите, чтобы они были записаны в бинарный журнал, самый простой способ избежать этого — отключить бинарное журналирование во время выполнения в режиме root во время обслуживания:
set sql_log_bin=0; alter table test engine=rocksdb;
Это изменяет таблицу test на реплике на rocksdb без регистрации изменения в бинарном журнале.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/read-only-replicas/