Wie erhalte ich die MySQL-Binärprotokollkoordinaten aus den Binärdateien?
-
26-09-2020 - |
Frage
Ich versuche, die Replikation für eine große (120 GB) MySQL-Datenbank einzurichten, und habe einen Fehler gemacht.
Ich habe den Master heruntergefahren, die Datendateien kopiert und den Master neu gestartet.Jetzt habe ich den Slave eingerichtet und gestartet, und mir wird klar, dass ich es versäumt habe, ihn zu bekommen MASTER_LOG_FILE
Und MASTER_LOG_POS
Werte, die zum Einrichten der Replikation erforderlich sind.
Ich habe immer noch eine unberührte Kopie der Datendateien.Gibt es eine Möglichkeit, dies festzustellen? MASTER_LOG_FILE
Und MASTER_LOG_POS
aus diesen Dateien?
Verwandte Frage:
- Was passiert, wenn Sie das einstellen?
MASTER_LOG_POS
auf einen früheren Zeitpunkt? - Liege ich richtig in der Annahme, dass doppelte Abfragen ausgeführt werden, was möglicherweise zu doppelten Daten führt?
Bearbeiten
Ich habe das untersucht mysqlbinlog
Befehl und haben herausgefunden, was wie die richtigen Informationen aussieht, indem Sie Folgendes ausgeführt haben:
mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
mysql-bin.000006 | grep end_log_pos
Die Ausgabe sieht in etwa so aus:
... 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
Ich schätze, ich sollte eine der letzten beiden Positionen verwenden, bin mir aber nicht sicher, welche.
Lösung
Hoffentlich haben Sie mysqld noch nicht auf dem Slave gestartet.
Zufällig ist eine Binlog-Position auch die Binlog-Größe am Ende jedes Binlog-Ereignisses.In Ihrem Fall können Sie das letzte Binlog verwenden, das der Slave sieht, was meiner Meinung nach der Fall ist mysql-bin.000006
.Ermitteln Sie die Dateigröße und verwenden Sie diese als Position.
Daher würden Sie auf dem Slave laufen
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;
und das sollte reichen!!!
Ich habe bereits besprochen, dass die Binlog-Position die Dateigröße ist
Nov 30, 2012
: Wie können Sie überwachen, ob MySQL-Binlog-Dateien beschädigt werden?Oct 20, 2011
: So handhaben Sie die My SQL DB-Master-zu-Master-Replikation, wenn es zu einem Speicherplatzausfall kam
Du hast auch gefragt
Was passiert, wenn Sie MASTER_LOG_POS auf einen früheren Zeitpunkt setzen?
Ja, es werden diese Binlog-Ereignisse wiedergegeben und Probleme verursachen.