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):
[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=Replikationsdatenbank
MySQL neustarten
sudo service mysql restart
Als nächstes loggt man sich in den MySQL Server ein und gibt dem User Slave_Benutzer die Replikationsrechte (Replication Slave):
mysql -p -u root; GRANT REPLICATION SLAVE ON *.* TO 'Slave_Benutzer'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
Um nun den aktuellen Stand der MySQL Datenbank zu erfassen, wählt man die Replikationsdatenbank und setzt sie kurz unter leseschutz:
USE Replikationsdatenbank; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
Die angezeigte Position sollte inkl. Filename notiert werden.

Noch schnell einen Dump (Backup) der MySQL Datenbank Replikationsdatenbank erstellen:
mysqldump -u root -ppassword –opt Replikationsdatenbank > Replikationsdatenbank.sql
Der Read Lock der Datenbank kann nun wieder entfernt werden
UNLOCK TABLES;
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:
[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
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
mysql -u root -ppassword Replikationsdatenbank > /Pfad/Zum/Speicherort/Replikationsdatenbank.sql
in die Slave DB migriert werden.
Anschließend noch den Slave MySQL Server neu starten
sudo service mysql restart
Noch folgende SQL Befehle absetzen und schlussendlich den SQL Server wieder starten. Achtung: Den Befehl auf die oben ausgegebene Position, Filename usw. abändern .
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;
Ab jetzt sollte die Replikation funktionieren.