Uno slave di replica MySQL deve essere impostato in sola lettura?


22

Ho la replica in esecuzione su Percona Server 5.5 seguendo questa guida e mi chiedevo se avrei dovuto aggiungere read-only=1quello del mio slave my.cnfper renderlo di sola lettura?

La guida imposta la replica per la tabella mysql in modo che gli utenti vengano replicati ma sto principalmente usando lo slave per prendere mysqldumps, e in un'emergenza riconfigurandolo come master, quindi non credo che abbiamo bisogno (o dovremmo) abilitare la scrittura su costantemente?


+1 per promemoria spesso trascurato per rendere gli schiavi di sola lettura.
RolandoMySQLDBA il

Risposte:


31

Quando uno Slave è di sola lettura , non è protetto al 100% dal mondo.

Secondo la documentazione di MySQL su read-only

Questa variabile è disattivata per impostazione predefinita. Quando è abilitato, il server non consente aggiornamenti se non dagli utenti che dispongono del privilegio SUPER o (su un server slave) dagli aggiornamenti eseguiti dai thread slave. Nelle configurazioni di replica, può essere utile abilitare read_only sui server slave per garantire che gli slave accettino gli aggiornamenti solo dal server master e non dai client.

Quindi, chiunque abbia il privilegio SUPER può leggere e scrivere a piacimento a un tale Slave ...

Assicurarsi che tutti gli utenti non privilegiati non dispongano del privilegio SUPER.

Se vuoi revocare tutti i privilegi SUPER in un colpo solo, eseguilo su Master and Slave:

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

Con riferimento allo Slave, questo riserverà il privilegio SUPER a solo roote impedirà ai non privilegiati di scrivere, da cui altrimenti verrebbero limitati.

AGGIORNAMENTO 2015-08-28 17:39 EDT

Ho appena appreso di recente che MySQL 5.7 introdurrà super_read_only .

Questo fermerà gli utenti SUPER nelle loro tracce perché dicono i Documenti 5.7

Se la variabile di sistema read_only è abilitata, il server consente gli aggiornamenti client solo dagli utenti che dispongono del privilegio SUPER. Se è abilitata anche la variabile di sistema super_read_only, il server proibisce gli aggiornamenti client anche dagli utenti che hanno SUPER. Vedere la descrizione della variabile di sistema read_only per una descrizione della modalità di sola lettura e le informazioni su come interagiscono read_only e super_read_only.

Le modifiche a super_read_only su un server master non vengono replicate su server slave. Il valore può essere impostato su un server slave indipendentemente dall'impostazione sul master.

super_read_only è stato aggiunto in MySQL 5.7.8.


1
quindi è buona norma rendere gli schiavi di sola lettura?
xref

6
Sì, è buona prassi farlo
RolandoMySQLDBA il

1
Come posso utilizzare il database di report sullo slave con i dati aggregati dal database operativo con l'opzione di sola lettura?
Geany,

3

Uno slave di replica MySQL deve essere impostato in sola lettura?

Sì, è meglio eseguire server slave con modalità R / O disponibili. Gli utenti precedentemente privilegiati potevano comunque modificare i dati di uno slave di questo tipo, ma in seguito hanno anche ottenuto la loro "manopola" di restrizione R / O.

Perché è importante: è meglio fallire con la scrittura che rimpiangere con una scrittura impropria che potrebbe effettivamente rendere inutilizzabile lo schiavo a causa della semplice confusione di dati o cose come conflitti di chiavi che interromperebbero la replica (non più lo schiavo effettivo di nuovo).

Esiste anche un software utilizzato per l'orchestrazione / suddivisione del carico che prenderebbe in considerazione lo stato di R / O dei server nei pool configurati per il routing delle richieste appropriate tra tali server.

Questa è sicurezza. Usalo


1

Il problema qui, incluso MySQL 8.0, è che MySQL non ti costringe a impostare read_only = ONquando esegui il start slavecomando. Perché è un problema? Perché quasi tutti i DBA MySQL usano i loro slave su RO, per prevenire il danneggiamento dei dati, ed esiste sempre un dba che accidentalmente esegue erroneamente un SQL che modifica i dati su uno slave o un'app che non cambierà la sua configurazione. Se voglio scrivere su slave, perché ha diversi schemi e ho bisogno di scrivere su questo schema, quindi il read_onlycomando deve essere più intelligente e lasciarci fare un read_only for schema. Questo potrebbe essere molto utile su server multi-master e slave che fanno un Replicate_Ignore_DB. Quindi, per ora, devi fare il controllo manualmente ed essere molto attento.

Godere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.