Должно ли подчиненное устройство репликации MySQL работать только для чтения?


22

Я выполнил репликацию на Percona Server 5.5, следуя этому руководству, и подумал, стоит ли мне добавлять read-only=1в ведомое устройство, my.cnfчтобы оно было только для чтения?

Руководство устанавливает репликацию для таблицы mysql так, чтобы пользователи реплицировались, но я в основном использую ведомое устройство для приема mysqldumps, а в аварийной ситуации меняю его на master, поэтому я не верю, что нам нужна (или должна была) быть включена запись на это постоянно?


+1 за часто пропускаемое напоминание сделать рабов только для чтения.
RolandoMySQLDBA

Ответы:


31

Когда Раб только для чтения , он не защищен на 100% от мира.

Согласно документации MySQL на read-only

Эта переменная по умолчанию отключена. Когда он включен, сервер не разрешает никаких обновлений, кроме как от пользователей с привилегией SUPER или (на подчиненном сервере) от обновлений, выполняемых подчиненными потоками. В настройках репликации может быть полезно включить read_only на подчиненных серверах, чтобы гарантировать, что подчиненные устройства принимают обновления только от главного сервера, а не от клиентов.

Таким образом, любой с привилегией SUPER может по желанию читать и писать такому Рабу ...

Убедитесь, что все непривилегированные пользователи не имеют привилегии SUPER.

Если вы хотите отозвать все привилегии SUPER за один раз, запустите это на Master и Slave:

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

Применительно к подчиненному, это зарезервирует привилегию SUPER для того, чтобы просто rootи не позволять непривилегированным делать записи, от которых они иначе были бы ограничены.

ОБНОВЛЕНИЕ 2015-08-28 17:39 ПО ВОСТОЧНОМУ ВРЕМЕНИ

Я только недавно узнал, что MySQL 5.7 представит super_read_only .

Это остановит пользователей SUPER в их следах, потому что 5,7 Документов говорят

Если системная переменная read_only включена, сервер разрешает обновления клиентов только пользователям, имеющим привилегию SUPER. Если системная переменная super_read_only также включена, сервер запрещает обновления клиента даже пользователям, имеющим SUPER. См. Описание системной переменной read_only для описания режима только для чтения и информации о взаимодействии read_only и super_read_only.

Изменения super_read_only на главном сервере не реплицируются на подчиненные серверы. Значение может быть установлено на подчиненном сервере независимо от настройки на главном сервере.

super_read_only был добавлен в MySQL 5.7.8.


1
так что лучше делать рабов только для чтения?
xref

6
Да, это лучшая практика
RolandoMySQLDBA

1
Как я могу использовать базу данных отчетов на ведомом устройстве с данными, агрегированными из оперативной базы данных только с возможностью чтения?
Geany

3

Должно ли подчиненное устройство репликации MySQL работать только для чтения?

Да, вам лучше запустить подчиненные серверы с доступными режимами R / O. Ранее привилегированные пользователи могли изменить данные такого ведомого в любом случае, но позже они также получили свою «ручку» ограничения R / O.

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

Есть также программное обеспечение, используемое для оркестровки / разделения нагрузки, которое будет учитывать состояние R / O серверов в пулах, которые они настроили для правильной маршрутизации запросов между этими серверами.

Это безопасность. Используй это.


1

Проблема здесь, включая MySQL 8.0, заключается в том, что MySQL не заставляет вас устанавливать настройки read_only = ONпри выполнении start slaveкоманды. Почему проблема? Поскольку почти все администраторы баз данных MySQL используют своих подчиненных в RO, чтобы предотвратить повреждение данных, всегда существует один dba, который случайно запускает SQL-запрос, изменяющий данные на ведомом устройстве, или приложение, которое не изменяет его conf. Если я хочу писать на ведомых, потому что у него есть несколько схем, и мне нужно делать записи на этой схеме, поэтому read_onlyкоманда должна быть более умной, и давайте сделаем a read_only for schema. Это может быть очень полезно на мультимастерных серверах и ведомых, которые делают Replicate_Ignore_DB. Итак, на данный момент вы должны сделать контроль вручную и быть очень осторожным.

Наслаждаться.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.