web-dev-qa-db-fra.com

Un esclave de réplication MySQL doit-il être défini en lecture seule?

J'ai la réplication en cours d'exécution sur Percona Server 5.5 en suivant ce guide et je me demandais si je devrais ajouter read-only=1 Au my.cnf De mon esclave pour le rendre en lecture seule?

Le guide configure la réplication de la table mysql pour que les utilisateurs soient répliqués, mais j'utilise principalement l'esclave pour prendre mysqldumps, et en cas d'urgence, le reconfigurer pour qu'il soit maître, donc je ne pense pas que nous ayons besoin (ou aurions dû) activer l'écriture sur constamment?

22
xref

Lorsqu'un esclave est en lecture seule , il n'est pas à 100% protégé du monde.

Selon la documentation MySQL sur read-only

Cette variable est désactivée par défaut. Lorsqu'il est activé, le serveur n'autorise aucune mise à jour, sauf des utilisateurs disposant du privilège SUPER ou (sur un serveur esclave) des mises à jour effectuées par des threads esclaves. Dans les configurations de réplication, il peut être utile d'activer read_only sur les serveurs esclaves pour garantir que les esclaves n'acceptent les mises à jour que du serveur maître et non des clients.

Ainsi, n'importe qui avec privilège SUPER peut lire et écrire à volonté sur un tel esclave ...

Assurez-vous que tous les utilisateurs non privilégiés n'ont pas le privilège SUPER.

Si vous souhaitez révoquer tous les privilèges SUPER en une seule fois, veuillez exécuter ceci sur Master et Slave:

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

En référence à l'esclave, cela réservera le privilège SUPER à seulement root et empêchera les non-privilégiés de faire des écritures dont ils seraient autrement limités.

MISE À JOUR 2015-08-28 17:39 EDT

Je viens d'apprendre récemment que MySQL 5.7 introduira super_read_only .

Cela arrêtera SUPER utilisateurs sur leurs traces, car la documentation 5.7 dit

Si la variable système read_only est activée, le serveur n'autorise les mises à jour client que des utilisateurs disposant du privilège SUPER. Si la variable système super_read_only est également activée, le serveur interdit les mises à jour du client même des utilisateurs disposant de SUPER. Voir la description de la variable système read_only pour une description du mode en lecture seule et des informations sur la façon dont read_only et super_read_only interagissent.

Les modifications apportées à super_read_only sur un serveur maître ne sont pas répliquées sur les serveurs esclaves. La valeur peut être réglée sur un serveur esclave indépendamment du réglage sur le maître.

super_read_only a été ajouté dans MySQL 5.7.8.

32
RolandoMySQLDBA

Un esclave de réplication MySQL doit-il être défini en lecture seule?

Oui, vous feriez mieux d'exécuter des serveurs esclaves avec R/O modes disponibles. Les utilisateurs précédemment privilégiés pouvaient de toute façon modifier les données d'un tel esclave, mais plus tard, ils ont également obtenu leur "bouton" de restriction de R/O.

Pourquoi c'est important - il vaut mieux échouer avec l'écriture que regretter avec une écriture incorrecte qui pourrait effectivement rendre l'esclave inutilisable en raison d'un simple bourrage de données ou de choses comme des conflits de clés qui briseraient la réplication (plus d'esclave réel à nouveau).

Il existe également des logiciels utilisés pour l'orchestration/la répartition de la charge qui prendraient en compte l'état de R/O des serveurs dans les pools qu'ils ont configurés pour le routage approprié des demandes entre ces serveurs.

C'est ça la sécurité. Utilise le.

3
poige

Le problème ici, y compris MySQL 8.0, est que MySQL ne vous oblige pas à définir read_only = ON lorsque vous exécutez le start slave commande. Pourquoi est un problème? Parce que presque tous les administrateurs de bases de données MySQL utilisent leurs esclaves sur RO, pour éviter la corruption des données, et il existe toujours un dba qui exécute accidentellement par erreur un SQL qui modifie les données sur un esclave, ou une application qui ne changera pas sa conf. Si je veux écrire sur des esclaves, car il a plusieurs schémas et j'ai besoin d'écrire sur ce schéma, donc le read_only la commande doit être plus intelligente, et faisons un read_only for schema. Cela pourrait être très utile sur les serveurs multi-maîtres et les esclaves qui font un Replicate_Ignore_DB. Donc, pour l'instant, vous devez faire le contrôle manuellement et être très prudent.

Prendre plaisir.

1
Cepxio