Domanda

Ho impostare la replica per il server MySQL. Posso collegarmi dalla macchina slave al server master utilizzando l'utente di replica / password. Io ho il filo conduttore degli schiavi SQL, ma il I / O filo schiavo non è esecuzione e lo slave stato I / O viene come vuoto quando verificata con 'mostra stato slave'. Quale potrebbe essere il problema?

Come posso risolvere questo? Il riavvio del servo non aiuta.

Questo è stato il mio male. Invece di dare un privilegio 'replica schiavo' per *.*, stavo solo dando per my_db.*

È stato utile?

Soluzione

  

Invece di dare un 'replica   privilegio schiava' a., io ero solo   dando per my_db. *.

schiavo replica è solo un privilegio globale (cioè per utente unico), ciò significa che un comando come

GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';

non ha alcun effetto perché non si può concedere che per database / colonne / tavola.

Il comando è necessario eseguire è:

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';

Poi fare un START SLAVE. Si potrebbe anche essere utile a guardare nel log degli errori mysql.

Io suggerirei una buona lettura della href="http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html" rel="nofollow noreferrer"> l'installazione di replica , come spiega tutto questo in dettaglio.

Altri suggerimenti

Ho affrontato lo stesso problema e fissato con seguente procedura. Completa collegamento thread è http://www.percona.com/forums/questions-discussions/percona-xtrabackup/11842-backup-stopped-working-slave-sql-running-no

I passaggi sono gli stessi come indicato da @ Luxknight007 tranne il suo passaggio 2. Tuttavia questa discussione contiene più in dettaglio che è molto utile. In seguito è la soluzione che ho usato e ha funzionato.

"Il primo problema è che è stata modificata la posizione di replica invece di fissare l'errore, e ha utilizzato un formato di nome di file binlog errato (probabilmente appena usato quello da quel post si è collegato direi). Per tornare al dove siete partiti, è necessario trovare il file binlog e la posizione che lo sql_thread schiava fermato a. sulla base della sua uscita di stato schiavo, sembra che lo schiavo sta leggendo da un nuovo file binlog (si può vedere che il valore Read_Master_Log_Pos è più piccolo il valore Exec_Master_Log_Pos, il che significa che deve essere la lettura di un file binlog più recente rispetto a dove lo sql_thread schiava fermato a), quindi è necessario trovare il file binlog che la sql_thread schiavo non è riuscita sul. quindi, guardare nel log degli errori per qualcosa come il qui di seguito:

Codice:

2013-10-08 12:48:51 37545 [ERROR] Slave SQL: Error 'Table 'testdb.test2' doesn't exist' on query. Default database: 'testdb'. Query: 'insert into test1 select * from test2', Error_code: 1146
2013-10-08 12:48:51 37545 [Warning] Slave: Table 'testdb.test2' doesn't exist Error_code: 1146
2013-10-08 12:48:51 37545 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000001' position 3427

Questo è un esempio ho ri-creato, quindi il vostro sarà un po 'diverso. Nota L'errore è simile a quello che si vede nel vostro stato slave. Quindi, trovare il messaggio di errore specifico nel file di log degli errori, e quindi individuare la parte terminale in cui è si dà il nome del file e la posizione ( "Ci siamo fermati al registro 'mysql-bin.000001' posizione 3427" nel mio esempio). La posizione deve essere 315.098.143, sulla base di stato slave spettacolo, come cioè quando lo sql_thread schiavo fermato l'esecuzione di eventi (Exec_Master_Log_Pos) ma l'io_thread continuato a leggere in quelli nuovi (Read_Master_Log_Pos).

Una volta trovato il nome del file binlog e la posizione corretta, eseguire nuovamente la sua dichiarazione padrone cambiamento sul vostro schiavo utilizzando le informazioni individuato nel log degli errori. Si noti che il nome del file dovrebbe essere qualcosa come "newcrmdb1-bin.XXXXXX", non mysql-bin.XXXXXX (si può vedere questa convenzione di denominazione vostro show stato slave sopra).

Codice:

mysql> change master to MASTER_LOG_FILE='newcrmdb1-bin.XXXXXX', Master_Log_Pos=315098143;

change master to MASTER_LOG_FILE='mysql-bin.000082' , Master_Log_Pos=47914844;

Una volta ci si indicò di nuovo alla posizione originale replica in cui l'sql_thread schiava fallito, è necessario quindi correggere l'errore che si lamentava per cominciare.

L'errore di replica iniziale sembra essere che ti dice che il asteriskcdr.bpleadcf tabella non esiste sullo slave, quindi l'istruzione INSERT non riesce quando tenta di selezionare i dati da quel tavolo. Quindi il problema non è che il tuo schiavo sembra essere già fuori sincronia con il tuo padrone. Se la tabella in questione sul master è statico o in gran parte statica, si potrebbe probabilmente risolvere questo esportando i dati dal proprio quel tavolo sul master utilizzando mysqldump e caricarla nel schiavo. Se ciò non è possibile, o se non si preoccupano che i dati, si può sempre e solo saltare la dichiarazione replica con sql_slave_skip_counter, ma poi lo schiavo sarebbe ulteriormente fuori sincrono con il master.

E se tutto il resto fallisce, si può sempre ricostruire lo schiavo dal master come ultima risorsa come bene. =) "

Ho incontrato lo stesso problema e provo questo passi

Per prima cosa aggiungere questo codice da qualche parte sotto [mysqld] nel my.cnf o my.ini slave-skip-errors=1046 questo salterà tutta voce duplicata dal momento che sarà eseguito l'intero file di log binario dove la fermata di replica, è possibile lasciare un commento, questo codice dopo la replica di successo.

1.Stop SLAVE;

2.Reset SLAVE;

3.Modificare MASTER PER MASTER_LOG_FILE = 'mysql-bin.000049';

Note: MASTER_LOG_FILE must be the last file where it stop from replicating

4.Modificare MASTER TO MASTER_LOG_POS = 98;

5.Start SLAVE;

controllare se hai successo

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