Domanda

Sto eseguendo un sistema di replica del registro binario MySQL master-slave (uff!) che, per alcuni dati, non è sincronizzato (il che significa che il master contiene più dati dello slave).Ma lo slave si ferma molto spesso al minimo errore MySQL, è possibile disabilitarlo?(forse un'impostazione my.cnf per gli errori di replicazione dello slave di replica o qualcosa del genere;))

Questo è ciò che accade, di tanto in tanto, quando lo schiavo tenta di replicare un oggetto che non esiste, semplicemente muore.un rapido controllo a MOSTRA STATO SLAVE \G;

       Slave-IO-Running: Yes
      Slave-SQL-Running: No
        Replicate-Do-DB: 
             Last-Errno: 1062
             Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table ( FIELDS ) VALUES ( VALUES )'

che correggo prontamente (una volta che mi rendo conto che lo slave è stato fermato) effettuando quanto segue:

STOP SLAVE;
RESET SLAVE;
START SLAVE;

...ultimamente questo è diventato un po' noioso, e prima di sputare una sorta di PHP che fa questo per me, mi chiedevo se ci fosse qualche voce my.cnf che non ucciderà lo slave al primo errore.

Saluti,

/mp

È stato utile?

Soluzione

Sì, con --slave-skip-errors=xxx in my.cnf, dove xxx è "tutto" o un elenco di codici di errore con virgole.

Altri suggerimenti

fermare lo schiavo;imposta sql_slave_skip_counter globale=1;iniziare schiavo;

È possibile ignorare solo l'errore corrente e continuare il processo di replica.

Innanzitutto, vuoi davvero ignorare gli errori?Se ricevi un errore, è probabile che i dati non siano più sincronizzati.Forse quello che vuoi è eliminare il database slave e riavviare il processo di sincronizzazione quando ricevi un errore.

In secondo luogo, penso che l'errore che ricevi non sia quando replichi un elemento che non esiste (cosa significherebbe comunque?): sembra che tu stia replicando un elemento che già esiste nel database slave.

Sospetto che il problema derivi principalmente dal non avviare una copia pulita dei dati.Sembra che il padrone sia stato copiato nello schiavo;quindi la replica è stata disattivata (o non è riuscita);e poi è ripartito, ma senza dare allo schiavo la possibilità di recuperare ciò che gli era mancato.

Se mai ti capita di avere un momento in cui il master può essere chiuso per l'accesso in scrittura abbastanza a lungo da clonare il database e importarlo nello slave, ciò potrebbe risolvere i problemi.

Moderno mysqldump i comandi hanno un paio di opzioni per facilitare l'impostazione della replica coerente.Guardare --master-data che inserirà il file di registro binario e la posizione nel dump e verrà impostato automaticamente quando caricato nello slave.Anche --single-transaction eseguirà il dump all'interno di una transazione in modo che non sia necessario alcun blocco in scrittura per eseguire un dump coerente.

Se lo slave non viene utilizzato per scritture diverse dalla replica, gli autori di High Performance MySQL consigliano di aggiungere read_only sul server slave per impedire agli utenti di modificare erroneamente i dati sullo slave poiché anche questo creerà gli stessi errori riscontrati.

penso che tu stia eseguendo la replica senza sincronizzare il database, prima sincronizza il database e prova la replica e i server generano gli stessi ID univoci e provano a impostare l'offset di incremento automatico

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top