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

22

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à mon esclave my.cnfpour 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?

xréf
la source
+1 pour un rappel souvent ignoré de rendre les esclaves en lecture seule.
RolandoMySQLDBA

Réponses:

31

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 qui ont le 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, toute personne disposant du 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 ce qui concerne l'esclave, cela réservera le privilège SUPER à juste rootet 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 les utilisateurs SUPER sur leurs traces, car les documents 5.7 disent

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 des clients 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 l'interaction entre read_only et super_read_only.

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.

RolandoMySQLDBA
la source
1
il est donc préférable de rendre les esclaves en lecture seule?
xréf
6
Oui, il est préférable de le faire
RolandoMySQLDBA
1
Comment puis-je utiliser la base de données de rapports sur l'esclave avec des données agrégées à partir de la base de données opérationnelle avec l'option en lecture seule?
Geany
3

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 des modes R / O 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.

poige
la source
1

Le problème ici, y compris MySQL 8.0, est que MySQL ne vous oblige pas à définir read_only = ONlorsque vous exécutez la start slavecommande. 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 que j'ai besoin d'écrire sur ce schéma, la read_onlycommande doit donc être plus intelligente, et faisons-en un read_only for schema. Cela pourrait être très utile sur les serveurs multi-maîtres et les esclaves qui font ça Replicate_Ignore_DB. Donc, pour l'instant, vous devez faire le contrôle manuellement et être très prudent.

Prendre plaisir.

Cepxio
la source