replica mysql riuscita ma slave non replicato


8

Ho creato una configurazione mysql master-slave e le cose sembrano a posto. lo "mostra lo stato principale;" sullo slave non mostra alcun errore. questo è l'output

 Slave_IO_State: Waiting for master to send event
                  Master_Host: 109.123.100.58
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 106
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 

Tuttavia sulla replica sullo slave non sembra accadere quando il master subisce un cambiamento

Il maestro. MOSTRA STATO MASTER

+------------------+----------+--------------+-------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB        |
+------------------+----------+--------------+-------------------------+
| mysql-bin.000001 |   639495 |              | mysql,informationschema |
+------------------+----------+--------------+-------------------------+

su slave RENDI ELENCO PROCESSLIST

+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id  | User        | Host      | db   | Command | Time  | State                                                                 | Info             |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| 174 | system user |           | NULL | Connect | 25777 | Waiting for master to send event                                      | NULL             |
| 175 | system user |           | NULL | Connect | 25777 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| 199 | root        | localhost | NULL | Query   |     0 | NULL                                                                  | show processlist |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

Mi sto perdendo qualcosa


Due domande. Hai la stessa versione di MySQL in esecuzione su master e slave? Hai un ID server diverso impostato nella configurazione per il master / slave? modifica: possiamo vedere anche il pieno SHOW MASTER STATUS, penso che manchi il primo bit.

scusate il mio errore, il bit superiore è stato l'output di SHOW SLAVE STATUS \ G. mostra lo stato principale sui rendimenti slave + ------------------ + ---------- + ------------- - + ------------------------- + | File | Posizione | Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + ---- --------------------- + | mysql-bin.000004 | 106 | | mysql, informationchema | + ------------------ + ---------- + -------------- + ---- --------------------- +
Soia

Non guardare SHOW MASTER STATUSlo schiavo . Questa informazione non è rilevante a meno che lo slave non funga anche da master per altri slave più a valle.
Michael - sqlbot

Se sei SHOW PROCESSLISTsul master, vedi la connessione in arrivo dallo slave? Dovresti. Inoltre, proverei STOP SLAVE IO_THREAD;quindi START SLAVE IO_THREAD;sullo slave e vedo come SHOW SLAVE STATUScambia l'uscita di (sullo slave), se non del tutto.
Michael - sqlbot,

Risposte:


5

L'output che hai presentato è molto confuso. Da un lato, il maestro mostra:

mysql-bin.000001   639495 

Lo slave PROCESSLISTindica che la replica funziona (il thread IO è collegato al master, il thread SQL è in attesa).

Lo schiavo SHOW SLAVE STATUSafferma di nuovo che tutto va bene, ma la posizione del padrone è 106.

Tutti questi output vengono emessi all'incirca nello stesso momento? In caso contrario, non sono preziosi.

Vorrei controllare quanto segue:

  • L'ovvio: è 109.123.100.58davvero il tuo padrone?
  • Fa SHOW PROCESSLISTsulla lista principale del collegamento da parte dello schiavo sotto replical'utente?
  • Hai server-idimpostazioni diverse per master e slave?
  • Avete qualche replicate-do-*o replicate-ignore-*impostazioni nel mysql.cnffile di?

sì, l'output è allo stesso tempo. 1. Sì, 109.123.100.58 è il maestro. 2. no 3. sì 4. no. Mostra l'elenco dei processi negli spettacoli master '+-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 23243 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +-------+------+-----------+------+---------+------+-------+------------------+
Soia

3
2-no ?? Strano di minuto in minuto. Non sono sicuro che il tuo schiavo sia effettivamente collegato al master giusto.
Shlomi Noach,

1
Grazie per il consiglio! Nel mio caso avevo la replica M-> S1-> S2 e il mio ID server S2 corrispondeva al mio ID server M.
Aaron R.,

1

Meglio che usare binlog-ignore-db è usare il filtro lato slave. Ero bloccato in una situazione simile, sì, mi ci è voluto un giorno intero per capire:

Ho perso qualcosa di grosso !!!

La differenza tra

--replicate-do-db=
--replicate-do-table=

Sul lato schiavo. E

--replicate-do-table='mydb.%'

non ha funzionato per me su -do-table. Ho dovuto usare

--replicate-do-db='mydb'

Immagino che avrebbe funzionato per un carattere jolly

--replicate-wild-do-table='mydb.%'

... Ora per capire come replicare la stessa tabella da più master. Ok, l'ho capito, MySQL non lo supporta in modo nativo; MariaDB 10 lo fa.

Inizialmente avevo anche un altro problema: la mia password era più lunga di 32 caratteri. Boo!


1

Ho anche riscontrato questo problema. La causa principale era avere il padrone server_id=0. MariaDB ha un comportamento speciale per il server_id=0quale non consente il funzionamento della replica.

Server_id deve essere univoco per ciascun server nel gruppo di replica. Se lasciato su 0, il valore predefinito fino a MariaDB 10.2.1, uno slave non si collegherà a un master e un master rifiuterà tutte le connessioni slave.

Quando ho iniziato a indicizzare in base a 1 tutto ha funzionato bene.


-2

Non hai detto allo slave quale DB replicare: la variabile Replicate_Do_DB è vuota.

Prova ad aggiungere la linea

replicate-do-db = nome_di_db (dove "nome_di_db" è il nome del database da replicare)

nel tuo my.cnf (su slave) e riavvia il server slave.

EDIT: Non penso che la mia risposta sia la soluzione giusta, nel frattempo ;-)

Forse dai un'occhiata a questa pagina invece: http://dev.mysql.com/doc/refman/5.1/en/replication-problems.html


Non penso sia corretto. Puoi vedere che 639495 byte sono stati registrati nel binlog del master

La domanda è perché la replica non funziona, non se qualcosa è stato scritto nel binlog. Di solito il comando SHOW MASTER STATUS non mostra più informazioni.

scusate il mio male .. mostra i rendimenti dello stato principale+------------------+----------+--------------+-------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+-------------------------+ | mysql-bin.000004 | 106 | | mysql,informationschema | +------------------+----------+--------------+-------------------------+
Soia

inoltre mi è stato detto che se non intendo replicate-do-db replica tutti i database. invece ho avuto ilentry binlog_ignore_db = mysql binlog_ignore_db = informationschema
Soia

1
Non seguire i consigli in questa risposta, poiché non è necessario dire al database quale schema replicare (per impostazione predefinita su tutti gli schemi), e questo molto probabilmente interromperà la replica, e molto probabilmente non è quello che stai cercando. Volete (99.999%) replicare tutti gli schemi.
Shlomi Noach,
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.