MySql-Replikations - slave-Rückstand master
Ich habe eine master/slave-Replikation auf meine MySql DB.
mein Sklave DB war für ein paar Stunden und ist wieder nach oben (Meister war die ganze Zeit), bei der Ausstellung show slave status
ich kann sehen, dass der slave ist, wird X Sekunden hinter dem Meister.
das problem ist, dass die slave-dont scheinen, um aufzuholen mit dem Meister, der X Sekunden hinter Meister dont scheinen zu fallen...
irgendwelche Ideen auf, wie ich helfen kann der slave aufholen?
InformationsquelleAutor der Frage Ran | 2011-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Idee
In Reihenfolge für Sie zu wissen, dass MySQL ist die vollständige Verarbeitung der SQL-Code von der relay-logs. Versuchen Sie Folgendes:
Dies wird stop-Replikation-herunterladen von neuen Einträge aus der master-in seinen relay-logs.
Den anderen thread, bekannt als der SQL-thread, weiter-Verarbeitung der SQL-Anweisungen, die Sie heruntergeladen von der master -.
Beim ausführen
SHOW SLAVE STATUS\G
halten Sie Ihr Auge aufExec_Master_Log_Pos
. Führen SieSHOW SLAVE STATUS\G
wieder. WennExec_Master_Log_Pos
bewegt sich nicht nach einer minute, können Sie voran gehen LaufSTART SLAVE IO_THREAD;
. Dies kann verringern Sie die Anzahl derSeconds_Behind_Master
.Andere als das, es gibt wirklich nichts, was Sie tun können, außer zu:
Seconds_Behind_Master
Exec_Master_Log_Pos
SHOW PROCESSLIST;
beachten Sie die SQL-thread zu sehen, wenn es die Bearbeitung von lang Laufenden Abfragen.BTW im Hinterkopf Behalten, dass, wenn Sie Sie ausführen
SHOW PROCESSLIST;
mit Replikation ausgeführt wird, sollte es zwei DB-Verbindungen, deren Benutzername istsystem user
. Einer dieser DB-Verbindungen wird die aktuelle SQL-Anweisung verarbeitet wird, die von der Replikation. Solange eine andere SQL-Anweisung sichtbar ist, jedes mal, wenn Sie laufenSHOW PROCESSLIST;
können Sie Vertrauen mysql ist noch ordnungsgemäß repliziert.InformationsquelleAutor der Antwort RolandoMySQLDBA
Was Binär-log-format verwenden Sie ? Verwenden Sie ROW oder STATEMENT ?
Wenn Sie ZEILE als binlog-format stellen Sie sicher, dass alle deine Tabellen Primärschlüssel oder Eindeutiger Schlüssel:
Wenn Sie Sie ausführen (z.B. eine delete-Anweisung auf dem master zu löschen 1 Mio Datensätze für eine Tabelle ohne PK oder unique-Schlüssel nur dann einen full table scan findet auf der master-Seite, was nicht der Fall ist, auf dem slave.
Wenn die ZEILE binlog_format verwendet wird, die durch MySQL schreibt die Zeilen, die änderungen an der Binär-logs (nicht so eine Aussage wie-ANWEISUNG binlog_format) und dass die änderung angewendet werden auf der slave-Seite Zeile für Zeile, was bedeutet, dass eine 1 million full table scan statt des Sklaven, zu reflektieren, die nur eine delete-Anweisung auf die master-und verursacht slave hinkt das problem.
InformationsquelleAutor der Antwort Moll
"Sekunden hinter" ist nicht ein sehr gutes Werkzeug, um herauszufinden, wie viel hinter dem Meister Sie wirklich ist. Was er sagt ist "die Abfrage, die ich gerade ausgeführt ausgeführt wurde X Sekunden auf die master". Das bedeutet nicht, dass Sie aufholen wird, und werden gleich hinter der master die nächste Sekunde.
Wenn Ihr slave ist normalerweise nicht hinterherhinkt und die Arbeit, die Last auf dem master ist in etwa konstant, Sie werden aufholen, aber es könnte einige Zeit dauern, vielleicht dauert es auch noch "ewig", wenn der slave ist in der Regel nur kaum Schritt halten mit dem master. Sklaven arbeiten auf einem einzigen Faden, so ist es per design viel langsamer als der master, auch wenn es einige Abfragen, die eine Weile dauern, auf die Meister, die Sie blockiert die Replikation während der Ausführung auf dem slave.
InformationsquelleAutor der Antwort Andreas Wederbrand
Nur überprüfen, wenn Sie die gleiche Zeit und Zeitzonen auf beiden Servern, also, Master als auch als Slave.
InformationsquelleAutor der Antwort Abhijit Buchake
Wenn Sie INNODB-Tabellen prüfen Sie, ob Sie innodb_flush_log_at_trx_commit auf einen anderen Wert, der von 0 auf SLAVE.
http://dev.mysql.com/doc/refman/4.1/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
InformationsquelleAutor der Antwort user1769609
Hatten wir genau das gleiche Problem nach dem einrichten unserer slave aus einer aktuellen Sicherung.
Mussten wir ändern die Konfiguration der unser Sklave zu werden, mehr crash-Sicherheit:
Ich denke, dass vor allem die sync_binlog = 1 bewirkt, dass das problem, wie die Spezifikationen der slave ist nicht so schnell wie im master. Diese config-option weist den slave zu speichern, wird jede Transaktion in der binären lo, bevor Sie ausgeführt werden (anstatt die Standardeinstellung jeder 10k Transaktionen).
Deaktivieren Sie diese config-Optionen wieder auf Ihre Standardwerte sehe ich, dass der slave ist Fang wieder an.
InformationsquelleAutor der Antwort 58k723f1
Nur um die Ergebnisse in meinem ähnlichen Fall.
Gab es einige bulk-temporäre Tabelle insert/update/delete geschahen im master belegt den meisten Raum von relay-log-in-slave. Und in Mysql 5.5, seit er single threaded CPU war immer auf 100% und nahm sich viel Zeit für die Bearbeitung dieser Datensätze.
Alles was ich Tat, war, fügen Sie diese Zeile in der mysql-cnf-Datei
und alles wurde wieder glatt.
Durchzuführen, um herauszufinden, welche Tabellen nehmen mehr Platz im relay-log, versuchen Sie den folgenden Befehl ein und öffnen Sie dann in einem text-editor. Sie können einige Hinweise
InformationsquelleAutor der Antwort Akhil
Wenn u haben mehrere Schemas sollten Sie mithilfe von multi-threaded slave-Replikation.Dies ist ein relativ neues feature.
Diese kann getan werden, dynamisch ohne anhalten des server.Nur halt die slave-sql-thread.
InformationsquelleAutor der Antwort shadow0359