Domanda

Sto tentando di impostare la replica per un grande database MySQL (120 GB) e ho incasinato.

Ho chiuso il master, ha copiato i file di dati e riavviato il master. Ora ho impostato lo slave e lo ha iniziato, e mi rendo conto che ho trascurato di ottenere i valori MASTER_LOG_FILE e MASTER_LOG_POS necessari per impostare la replica.

Ho ancora una copia non toccata dei file di dati. C'è un modo per determinare MASTER_LOG_FILE e MASTER_LOG_POS da tali file?

Domanda correlata:

    .
  • Cosa succede se si imposta il MASTER_LOG_POS in un punto precedente in tempo?
  • Sono corretto nel presumere che le query duplicate verranno eseguite, possibilmente con conseguenti dati duplicati?

Modifica

Ho indagato sul comando mysqlbinlog e ho scoperto ciò che assomiglia alle informazioni corrette eseguendo:

mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
    mysql-bin.000006 | grep end_log_pos
.

L'output sembra qualcosa del genere:

... a whole bunch more lines ...

#150621 20:10:21 server id 1  end_log_pos 720159843     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720161877     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:21 server id 1  end_log_pos 720162762     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164796     Query   thread_id=901489    exec_time=0 error_code=0
#150621 20:10:22 server id 1  end_log_pos 720164815     Stop
.

Sto indovinando che dovrei usare una di quelle ultime due posizioni, ma non sono sicuro di quale.

È stato utile?

Soluzione

Speriamo, non hai ancora iniziato MySQLD sullo slave.

Si succede così che una posizione Binlog sia anche la dimensione del binlog alla fine di ogni evento Binlog. Nel tuo caso, è possibile utilizzare l'ultimo binlog che lo slave vede, che posso assumere è mysql-bin.000006. Ottieni il filesge e usa quello come la posizione.

Pertanto, sullo slave che eseguirai

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST='...',
    MASTER_PORT=3306,
    MASTER_USER='repluser',
    MASTER_PASSWORD='replpassword',
    MASTER_LOG_FILE='mysql-bin.00006',
    MASTER_LOG_POS=720164815;
START SLAVE;
.

E questo dovrebbe farlo !!!

Ho discusso la posizione del binlog è il filesise prima

Hai anche chiesto

.

Cosa succede se si imposta Master_log_pos in un momento precedente?

Sì, riproverà quest'evento Binlog e causerà problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top