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.cnf
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?
Réponses:
Lorsqu'un esclave est en lecture seule , il n'est pas à 100% protégé du monde.
Selon la documentation MySQL sur
read-only
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:
En ce qui concerne l'esclave, cela réservera le privilège SUPER à juste
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 les utilisateurs SUPER sur leurs traces, car les documents 5.7 disent
la source
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.
la source
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 lastart 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 que j'ai besoin d'écrire sur ce schéma, laread_only
commande doit donc être plus intelligente, et faisons-en unread_only for schema
. Cela pourrait être très utile sur les serveurs multi-maîtres et les esclaves qui font çaReplicate_Ignore_DB
. Donc, pour l'instant, vous devez faire le contrôle manuellement et être très prudent.Prendre plaisir.
la source