MySQL Master / Slave Replikation

E-Commerce IT-Consulting and Development

MySQL Master / Slave Replikation

Eine Datenbankreplikation ist für den Hausgebrauch sicher wenig sinnvoll – Zumal es wohl kaum als Backup Lösung zu gebrauchen ist, da eine zerstörerische Query, die auf der Master DB ausgeführt wird innerhalb derselben Sekunde den Slave erreicht.

Viel mehr kann mit einem solchen redundanten Datenbankystem Pferderstärken auf dem Master DB Server gespart werden. Beispielsweise können komplexe Queries dann auf dem Slave ausgeführt werden.

Dieses Tutorial ist für Ubuntu Lucid Lynx (10.04) geschrieben, sollte sich aber auf anderen Debian System (auch SUSE) übertragen lassen

Master Server

Zuerst sollte der Master Server konfiguriert werden. Wichtig hierbei ist, dass der Server Buch führt (sog. Log) über seine Aktivitäten.
In der /etc/mysql/my.cnf sind daher folgende Änderungen notwendig (für die DB Replikationsdatenbank):
[code][mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=Replikationsdatenbank[/code]

MySQL neustarten
[code]sudo service mysql restart[/code]

Als nächstes loggt man sich in den MySQL Server ein und gibt dem User Slave_Benutzer die Replikationsrechte (Replication Slave):
[code lang=“sql“]mysql -p -u root;
GRANT REPLICATION SLAVE ON *.* TO ‚Slave_Benutzer’@’%‘ IDENTIFIED BY ‚password‘;
FLUSH PRIVILEGES;[/code]

Um nun den aktuellen Stand der MySQL Datenbank zu erfassen, wählt man die Replikationsdatenbank und setzt sie kurz unter leseschutz:
[code lang=“sql“]USE Replikationsdatenbank;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;[/code]

Die angezeigte Position sollte inkl. Filename notiert werden.

Noch schnell einen Dump (Backup) der MySQL Datenbank Replikationsdatenbank erstellen:
[code]mysqldump -u root -ppassword –opt Replikationsdatenbank > Replikationsdatenbank.sql[/code]

Der Read Lock der Datenbank kann nun wieder entfernt werden
[code lang=“sql“]UNLOCK TABLES;[/code]

Slave Server

Der Slave Server sollte nun bescheid bekommen, welchen Master Server er untergeordnet ist.
Deshalb fügt man folgendes unter /etc/mysql/my.cnf ein:
[code][mysqld]
server-id=2
master-host = [IP Adresse des Master Servers]
master-user = Slave_Benutzer
master-password = password
master-connect-retry = 60
replicate-do-db = Replikationsdatenbank

#Optionale Angaben

#DB die nicht importiert werden sollen
replicate-ignore-db = Datenbank

#Nur folgende Tabellen replizieren
replicate-do-table = Datenbank.tabelle

#Folgende Tabelle nicht replizieren
replicate-ignore-table = Datenbank.tabelle[/code]

Sollten mehrere Tabellen von der Replizierung ausgenommen werden muss für jede Tabelle eine Zeile replicate-ignore-table verwendet werden.

Die per MySQL Dump archivierte DB sollte auf dem Slave Server kopiert werden und mittels
[code]mysql -u root -ppassword Replikationsdatenbank > /Pfad/Zum/Speicherort/Replikationsdatenbank.sql[/code] in die Slave DB migriert werden.

Anschließend noch den Slave MySQL Server neu starten
[code]sudo service mysql restart[/code]

Noch folgende SQL Befehle absetzen und schlussendlich den SQL Server wieder starten. Achtung: Den Befehl auf die oben ausgegebene Position, Filename usw. abändern .
[code lang=“sql“]CHANGE MASTER TO MASTER_HOST=’IP vom Master Server‘, MASTER_USER=’Slave_Benutzer‘, MASTER_PASSWORD=’password‘,
MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=960153707;
START SLAVE;[/code]

Ab jetzt sollte die Replikation funktionieren.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen