Come posso ottenere le coordinate di registro binarie MySQL dai file binari?
-
26-09-2020 - |
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.
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
- .
-
Nov 30, 2012
: Come Puoi monitorare se i file Binlog di MySQL vengono corrotti? - Generacodictagcode: Come gestire il mio master my SQL DB alla replica master quando c'era un'interruzione dello spazio su disco
Hai anche chiesto
.Cosa succede se si imposta Master_log_pos in un momento precedente?
Sì, riproverà quest'evento Binlog e causerà problemi.