Ich habe MySQL (5.5) im Master-Slave-Setup und einen anderen Slave-Server erstellt.
Ich habe den ursprünglichen Slave gestoppt, die Daten gelöscht, kopiert und wieder importiert und es hat gut funktioniert. Ich habe die master_log-Position des ursprünglichen Slaves notiert und diese Befehle verwendet, um sie für den neuen Slave festzulegen
CHANGE MASTER TO MASTER_HOST='<ipaddress>',
MASTER_USER='<username>', MASTER_PASSWORD='<password>',
MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000851',
MASTER_LOG_POS=15824150,
MASTER_CONNECT_RETRY=10;
Als ich mit dem neuen Sklaven anfing, bekam ich
Last_IO_Error: Schwerwiegender Fehler 1236 vom Master beim Lesen von Daten aus dem Binärlog: 'Logereignis-Eintrag überschritten max_allowed_packet; Erhöhe max_allowed_packet auf master '
Als ich den ursprünglichen Sklaven startete, holte er jedoch gut auf und ist jetzt synchronisiert.
Also die Fragen:
Der aktuelle Wert ist 16 Millionen. Woher weiß ich, wie groß der Rest sein muss? (Ich würde lieber das Ausprobieren mit einem Produktionsserver vermeiden).
Warum muss ich den Wert auf dem Master erhöhen, wenn der ursprüngliche Slave einwandfrei funktioniert hat? Kann das Problem wirklich beim neuen Slave liegen?
aktualisieren
Ich erhöhte das max_allowed_packet auf 1073741824, als Rolando den Master, den alten und den neuen Slave vorschlug, und startete sie neu ( SET GLOBAL max_allowed_packet = 1073741824;
aus irgendeinem Grund schien es nicht zu dauern)
jetzt ist der letzte E / A-Fehler derselbe wie zuvor, aber jetzt sehe ich
Last_SQL_Error: Fehler beim Lesen des Relaisprotokolls: Der Ereigniseintrag des Relaisprotokolls konnte nicht analysiert werden. Mögliche Gründe sind: Das Binärlog des Masters ist beschädigt (Sie können dies überprüfen, indem Sie im Binärlog 'mysqlbinlog' ausführen), das Relay-Log des Slaves ist beschädigt (Sie können dies überprüfen, indem Sie im Relay-Log 'mysqlbinlog' ausführen), a Netzwerkproblem oder ein Fehler im MySQL-Code des Masters oder Slaves. Wenn Sie das Binärprotokoll des Masters oder das Relaisprotokoll des Slaves überprüfen möchten, können Sie deren Namen ermitteln, indem Sie für diesen Slave die Meldung 'SHOW SLAVE STATUS' ausgeben.
Wenn ich ein mysqlbinlog für die Master-Datei mache, scrollt es mit Befehlen ziemlich glücklich für Ewigkeiten vorbei - die Datei ist 722M groß - wenn ich das für das Slave-Relay-Protokoll mache, das ich erhalte
FEHLER: Fehler in Log_event :: read_log_event (): 'Überprüfung der Datenqualität fehlgeschlagen', data_len: 38916267, event_type: 69
FEHLER: Eintrag bei Offset 253 konnte nicht gelesen werden: Fehler im Protokollformat oder Lesefehler.
Ich habe die Variablen überprüft und die Änderungen haben jedoch funktioniert
mysql> show variables LIKE '% max_allowed_packet%';
auf dem neuen sklaven zeigte max_allowed_packet
UNDslave_max_allowed_packet
wo wie auf dem master es nur hatmax_allowed_packet
Also habe ich den Master einer Versionsprüfung unterzogen:
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 1.1.6 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.11-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
und auf den neuen sklaven
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 5.5.32 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.32-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
Sind diese beiden Versionen zu weit voneinander entfernt?
quelle
Antworten:
Es ist in Ordnung, das
max_allowed_packet
auf 1G zu maximieren. Jedes Mal, wenn ein MySQL-Paket erstellt wird, springt es von Anfang an nicht auf 1G. Warum?Zuerst müssen Sie wissen, was ein MySQL-Paket ist. Seite 99 des Buches
erklärt es in den Absätzen 1-3 wie folgt:
Vergleichen Sie das mit der MySQL-Dokumentation unter
max_allowed_packet
:Angesichts dieser Informationen sollten Sie froh sein, dass MySQL das MySQL-Paket nach Bedarf erweitert und komprimiert. Deshalb mach weiter und
max_allowed_packet
Sowohl am Master als auch am Slave auf 1G eingestelltnet_buffer_length
auf den Höchstwert von 1 M sowohl auf Master und SlaveMaster und Slave sollten übereinstimmen, wen sie Daten übertragen, insbesondere BLOB-Daten.
UPDATE 04.07.2013 07:03 EDT
Aus Ihren Nachrichten zum Relay-Protokoll geht hervor, dass Sie Folgendes haben
VORSCHLAG
Beim Ausführen werden
CHANGE MASTER TO
alle Relaisprotokolle gelöscht und es wird ein neues Protokoll erstellt. Sie replizieren vom letzten Master-BinLog-Ereignis (BinLog, Position), das auf dem Slave ausgeführt wurde.Versuche es !!!
quelle
MASTER_LOG_FILE
Namen eingegeben habe . ZB verwendet ,mysql-bin.000001
wenn ich verwendet habe , solltemysql-bin.000003
vonSHOW MASTER STATUS
inCHANGE MASTER TO
.Eher peinlich war das Problem, dass falsche Dateinamen für Protokolle, die seltsame Ergebnisse verursachten, mit den richtigen Dateinamen reimportiert wurden und alles in Ordnung war, hängt Kopf in Schande
quelle