Запобігти нереплікації запису в підлеглий MySQL?


13

У нас є кілька серверів баз даних MySQL, створених з реплікацією на основі рядків, для продуктивності. Програмне забезпечення пише ведучому і читає або від ведучого, або з раба. Все працює чудово, здебільшого.

Я розумію, що MySQL дозволить записувати в підлеглий, хоча він знає, що це підлеглий MySQL. В ідеалі я хотів би закрити це, так що навіть якщо хтось пише якийсь поганий код, який отримує з'єднання для читання і робить UPDATE, це призведе до помилки, а не докладати дані до підлеглого.

Чи є спосіб це зробити в MySQL? Очевидно, що ми хотіли б зробити це неможливим і від нашого програмного забезпечення, але, як брандмауер на наших серверах, я хотів би бути максимально захисним.

Дякую!

Відповіді:


13

Увімкніть read-onlyопцію в my.cnf. Він також може бути вказаний як прапор у командному рядку за --read-onlyдопомогою mysqld.


5
Зауважте, що це не буде працювати для суперпользователей (тобто: root користувача в MySQL), оскільки він не підкоряється лише для читання.
vmfarms

5

Як альтернатива налаштуванню read_only=1(наприклад, коли в іншому випадку є інші бази даних скретчпаду / звітності / розробки), я іноді позбавляю всіх привілеїв, крім SELECT, від усіх користувачів до БД, які я реплікую.

Тобто після запуску команди GRANT на ведучому, я запускаю команду REVOKE на підлеглому.


2

Як і в MySQL 5.7.8 , тепер існує super_read_onlyопція, яка не дозволяє навіть користувачам SUPER виконувати оновлення клієнтів. Це не порушує процес реплікації. Як і в інших параметрах, його можна встановити:

  • у форматі командного рядка ( --super_read_only=ON),
  • як змінна в my.cnf ( super_read_only=1) або
  • з підказки клієнта ( SET GLOBAL super_read_only = 1;).

Зауважте, що:

  • Включення super_read_onlyнеявно дозволяєread_only
  • Відключення read_onlyнеявно відключаєтьсяsuper_read_only

Деякі застереження:

  • Ні, read_onlyні super_read_onlyперешкоджають операціям на тимчасових таблицях.
  • Вони не завадять виконувати операції з метаданими, такі як ANALYZE TABLE та OPTIMIZE TABLE.
  • super_read_onlyПовідомляються про помилки для певних запитів із включеним.

Довідка: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/


1

Як видно з першого повідомлення, ви робите це з дозволами. Опція "лише для читання" не працює для супер користувачів як FYI, а також не є дійсно ефективним рішенням для раба, де ви хочете запобігти запису. Потрібно запобігти запису з дозволами користувача / бази даних / таблиці. Для одного, користувач реплікації все-таки повинен мати можливість записувати на підлеглий, щоб синхронізувати його з ведучим. Кращим способом керування записом є те, що вам потрібно скасувати параметри, які дозволяють записувати (тобто вставляти, створювати тощо) для відповідного користувача, який повинен робити читання лише на підлеглому.


0

Надавайте лише пов'язані з тиражуванням права користувачам на підлеглому. У вас все ще виникають проблеми з правами користувача root, але ви можете видалити віддалений кореневий доступ до сервера БД.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.