Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

theomega
Userprojekt
Userprojekt
Posts: 704
Joined: 2003-01-27 14:36

Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by theomega »

Hallo Leute,
ich möchte einen Replication-Slave für meinen MySQL-Server aufsetzten. Die meisten Anleitungen basieren ja darauf das man den master stoppt oder lockt, dann das Datenverzeichniss packt und auf den Slave schiebt. Das ist leider nicht akzeptabel, das es um Datenmengen von über 20GB geht und ich nicht einfach so den Server anhalten kann.
Gibt es eine andere Möglichkeit?

danke schonmal
TO
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by Joe User »

Master und Slave konfigurieren und restarten, dann auf dem Slave:

Code: Select all

LOAD DATA FROM MASTER;
START SLAVE;
Bei 20GB dauert es allerdings einige Zeit...
HTH
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Top

stanglwirt
Posts: 48
Joined: 2006-01-10 14:44

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by stanglwirt »

in dem zusammenhang hätte ich eine frage:

was passiert wenn der slave aus irgendeinem grund nichts mehr vom master ziehen kann? (leitung unterbrochen oder master abgestürzt etc.)

schlägt der slave irgendwie alarm? versucht er immer weiter zu synchronisieren und wenn wieder verbindung besteht, läd er sich die daten nach?


danke!
Top

theomega
Userprojekt
Userprojekt
Posts: 704
Joined: 2003-01-27 14:36

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by theomega »

Der Slave logt in seiner Error-Log das er nicht verbinden konnte, er kann jedoch jederzeit wieder zum master aufholen sobald die verbindung steht. Das macht er auch automatisch, so sagt es zumindest die Doku.

Ne andere Frage: Was passiert wenn ich auf dem Slave einen Schreibzugriff machen? Wird das zum MAster syncrhonsiiert oder ist es garnicht möglich?

Danke
TO
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by Joe User »

theomega wrote:Ne andere Frage: Was passiert wenn ich auf dem Slave einen Schreibzugriff machen? Wird das zum MAster syncrhonsiiert oder ist es garnicht möglich?
Schreibzugriffe auf den Slave sind möglich, allerdings nur auf nicht syncronisierte Tabellen sinnvoll. Wenn Du auf syncronierte Tabellen schreiben willst, brauchst Du ein Master<->Master Setup.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by isotopp »

theomega wrote:Hallo Leute,
ich möchte einen Replication-Slave für meinen MySQL-Server aufsetzten. Die meisten Anleitungen basieren ja darauf das man den master stoppt oder lockt, dann das Datenverzeichniss packt und auf den Slave schiebt. Das ist leider nicht akzeptabel, das es um Datenmengen von über 20GB geht und ich nicht einfach so den Server anhalten kann.
Gibt es eine andere Möglichkeit?

danke schonmal
TO
Ein Backup ist ein Abzug der Tablespaces einer Datenbank ohne daß sich die Tablespraces der Datenbank verändern während der Abzug gemacht wird. Ein Backup ist also immer mit genau einer Binlog-Position assoziiert.

Eine Point-in-Time-Recovery ist ein Wiedereinspielen eines solches Backups und ein Anwenden der Binlogs ab dieser Binlog-Position bis zum gewünschten Zielpunkt in der Zeit.

Ein Slave ist eine Rolling Recovery: Du setzt den Slave auf, indem Du ein Full-Backup auf dem Slave einspielst und dem Slave dann seine Binlog-Position mitteilst. Der Slave loggt sich auf dem Master ein, lädt die Binlogs ab da runter und führt sie aus.

Du kannst also einen Slave jederzeit aufsetzen, indem Du eines Deiner Full Backups einspielst und ab da das Binlog lädst. Die konkrete Methode, mit der das Backup erstellt wurde ist dabei unwesentlich.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by isotopp »

stanglwirt wrote:in dem zusammenhang hätte ich eine frage:

was passiert wenn der slave aus irgendeinem grund nichts mehr vom master ziehen kann? (leitung unterbrochen oder master abgestürzt etc.)

schlägt der slave irgendwie alarm? versucht er immer weiter zu synchronisieren und wenn wieder verbindung besteht, läd er sich die daten nach?


danke!
Der Slave hat zwei Threads, einen IO-Thread und einen SQL-Thread. Der IO-Thread lädt das Binlog vom Master auf den Slave runter und speichert es dort als Relay-Log. Der SQL-Thread führt das Relay-Log aus und schmeisst es dann weg.

Wenn der IO-Thread stehen bleibt, versucht er nach einer gewissen Zeit (Default: 60 Sekunden) ein neues Login auf dem Master und ab der letzten Binlog-Position fortzusetzen. Gibt es das Binlog an dieser Position auf dem Master nicht mehr, ist der Slave verloren und muss neu aufgesetzt werden.

Das kann man überwachen - etwa mit Nagios.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by isotopp »

Joe User wrote:Master und Slave konfigurieren und restarten, dann auf dem Slave:

Code: Select all

LOAD DATA FROM MASTER;
START SLAVE;
Bei 20GB dauert es allerdings einige Zeit...
HTH
LOAD DATA FROM MASTER ist langsam und funktioniert nur mit MyISAM und auch da nicht richtig. Der Befehl ist in MySQL 5.1 nicht mehr vorhanden und in den Versionen davor discouraged. Verwende ihn nicht.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by isotopp »

Joe User wrote:Schreibzugriffe auf den Slave sind möglich, allerdings nur auf nicht syncronisierte Tabellen sinnvoll. Wenn Du auf syncronierte Tabellen schreiben willst, brauchst Du ein Master<->Master Setup.
Master-Master existiert nicht. Was Ihr für Master-Master haltet ist in Wirklichkeit ein Ring-mit-Zwei. Ringe in MySQL-Replikation sind möglich, haben aber eine Reihe von Nachteilen, insbesondere bei der Wiederherstellung nach einem Fehler.

Wenn man sie vermeiden kann sollte man das tun.
Top

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by oxygen »

isotopp wrote: Du kannst also einen Slave jederzeit aufsetzen, indem Du eines Deiner Full Backups einspielst und ab da das Binlog lädst. Die konkrete Methode, mit der das Backup erstellt wurde ist dabei unwesentlich.
Das geht sogar einfacher als man denkt. ein einfaches

Code: Select all

mysqldump --opt -hserver1 -uuser -ppasswort datenbank1 | mysql -hserver2 -uuser -ppasswort datenbank2
reicht da oft schon.
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by Joe User »

Danke Kris, wieder etwas gelernt.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Replication-Slave aussetzten OHNE den Master zu stoppen oder zu locken

Post by isotopp »

oxygen wrote:Das geht sogar einfacher als man denkt. ein einfaches

Code: Select all

mysqldump --opt -hserver1 -uuser -ppasswort datenbank1 | mysql -hserver2 -uuser -ppasswort datenbank2
reicht da oft schon.
Da weiß man jedoch die Binlog-Position noch nicht, mit der das Backup assoziiert ist. Also braucht es noch ein "--master-data" oder "--master-data=2". Das impliziert auch das fehlende "--lock-all-tables", das man braucht, damit das Backup konsistent wird (nicht mit "--lock-table" verwechseln).

Wenn man eine reine InnoDB-Datenbank verwendet, sollte man "--single-transaction" verwenden. Das macht vor dem Dump ein "BEGIN WORK" und nach dem Dump ein "COMMIT" in "REPEATABLE-READ". Solange das Undo-Log groß genug ist, bekommt man so (von InnoDB-Tables) ein konsistentes, lockfreies, logisches Backup.
Top