Prevenire le scritture senza replica sullo slave MySQL?


13

Abbiamo alcuni server di database MySQL configurati con replica basata su righe, per prestazioni. Il software scrive sul master e legge dal master o dallo slave. Tutto funziona alla grande, per la maggior parte.

Comprendo che MySQL consentirà le scritture allo slave, anche se sa che è uno slave MySQL. Idealmente, mi piacerebbe chiudere questo, quindi anche se qualcuno scrive un codice UPDATEerrato che ottiene una connessione in lettura e fa un errore, genererà un errore piuttosto che mettere dati sullo slave.

C'è un modo per farlo in MySQL? Ovviamente vorremmo renderlo impossibile anche dal nostro software, ma come un firewall sui nostri server, vorrei essere il più difensivo possibile.

Grazie!

Risposte:


13

Abilita l' read-onlyopzione in my.cnf. Può anche essere specificato come flag sulla riga di comando usando --read-onlycon mysqld.


5
Nota che questo non funzionerà con i super utenti (es .: utente root in MySQL) in quanto non obbedisce in sola lettura.
vmfarms,

5

In alternativa all'impostazione read_only=1(ad es. Quando sull'istanza slave sono presenti altri database scratchpad / report / sviluppo), a volte rimuovo tutti i privilegi diversi da SELECT da tutti gli utenti sul DB che sto replicando.

Cioè, dopo aver eseguito il comando GRANT sul master, eseguo il comando REVOKE sullo slave.


2

A partire da MySQL 5.7.8 , ora esiste super_read_onlyun'opzione che impedisce anche agli utenti SUPER di eseguire aggiornamenti client. Non interrompe il processo di replica. Come con altre impostazioni, può essere impostato:

  • in formato riga di comando ( --super_read_only=ON),
  • come variabile in my.cnf ( super_read_only=1) o
  • dal prompt del client ( SET GLOBAL super_read_only = 1;).

Nota che:

  • L'abilitazione super_read_onlyabilita implicitamenteread_only
  • La disabilitazione read_onlydisabilita implicitamentesuper_read_only

Alcuni avvertimenti:

  • read_onlysuper_read_onlyimpedirà operazioni sulle tabelle temporanee.
  • Non impediranno operazioni sui metadati come ANALYZE TABLE e OPTIMIZE TABLE.
  • super_read_onlySono stati segnalati bug per determinate query con abilitato.

Riferimento: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/


1

Come suggerisce il primo post, lo fai con le autorizzazioni. L'opzione di sola lettura non funziona per i super utenti come FYI e non è in realtà una soluzione praticabile per uno slave in cui si desidera impedire la scrittura. È necessario impedire la scrittura con autorizzazioni utente / database / tabella. Per uno, l'utente di replica deve comunque essere in grado di scrivere sullo slave per mantenerlo sincronizzato con il master. Il modo migliore per controllare le scritture è che è necessario revocare le opzioni che consentono le scritture (ad es. Inserti, crea, ecc.) Per l'utente in questione che dovrebbe fare letture solo sullo slave.


0

Assegnare solo diritti relativi alla replica agli utenti sullo slave. Hai ancora il problema dei diritti dell'utente root, ma puoi rimuovere l'accesso root remoto al server DB.

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.