Es ist geschafft alt350

Ich hatte bis jetzt immer morgens um 4 Uhr ein Backup von m0rphex.com gezogen, diese Lösung war jedoch schon länger nicht zufriedenstellend für mich, was wäre wenn um 23 Uhr Abends der Server ausfällt ? Alle Daten in einer Zeitspanne von 19 Stunden wären dann verloren.

MySQL bringt hier eine interessante Möglichkeit mit, die Datenbank Replication nachdem Master und Slave Prinzip.

In meinem Fall ist der Master jetzt der m0rphex.com Server und der Slave ein virtueller Debian Server bei mir zuhause der 24/7 online ist. Soweit zur Vorgeschicht der ganzen Aktion :]

Als aller erstes solltet ihr prüfen das die beiden Mysql Versionen auf Slave und Master miteinander kompatibel sind, ich habe hierzu auf dem m0rphex.com Server die Mysql Version auf “5.0.20a-Debian_2-log” geupdatet.

Konfiguration des Master Servers

Zuerst muss man auf dem Master Server folgendes in die my.cnf eintragen [ unter Debian liegt diese in /etc/mysql ]

Zitat von console:

log-bin = /var/log/mysql/mysql-bin.logbinlog-do-db=deine_datenbank

server-id=1

für example DB muss der Datenbank der zu replizierenden Datenbank eingegeben werden, z.B m0rphex!

Jetzt starten wir den MySQL Server neu mit:

Zitat von console:/etc/init.d/mysql restart

nun gibt man auf der Console

Zitat von console:

mysql -p

ein, dann wird man nach dem passwort für den root benutzer gefragt. Jetzt hat man eine mysql console auf dem Master. Nun muss man um dem Slave Server das recht zu geben die Datenbank zu replizieren folgendes eingeben:

Zitat von console:

GRANT REPLICATION SLAVE ON *.* TO ‘slaveuser’@'%’ IDENTIFIED BY ‘your_password’;FLUSH PRIVILEGES;

slaveuser und your_password sollten in jedem fall ersetzt werden.

Die zweite Zeile mit flush privileges läd die MySQL Rechte Tabelle neu.

Nun gehts weiter auf der Mysql Console, wir müssen die Tabellen locken, damit während der ersten Replikation keine Änderungen stattfinden.

Zitat von console:

USE deine_datenbank;FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;

Jetzt sollte man etwas wie das folgende sehen:

Zitat von console:

+—————+———-+————–+——————+| File | Position | Binlog_do_db | Binlog_ignore_db |

+—————+———-+————–+——————+

| mysql-bin.003 | 12345 | deine_datenbank | |

+—————+———-+————–+——————+

1 row in set (0.00 sec)

Der Dateiname bei File und die Position sollten notiert werden weil sie später auf dem Slave benötigen werden. In meinem Fall sind es mysql-bin.003 und 12345.

Jetzt verlassen wir die Mysql Console wieder mit:

Zitat von console:

quit;

Jetzt is die Tabelle schreibgeschützt und es muss ein MysqlDump angelegt werden damit wir den momentan Status 1 zu 1 auf dem Slave haben. Das geht mit dem folgenden Befehl:

Zitat von console:

mysqldump -u root -p

–opt deine_datenbank > masterdb.sql

Dieser Befehl packt den Inhalt der Datenbank deine_datenbank in die datei masterdb.sql.

Jetzt muss die Datenbank des Masters wieder Schreibrechte erhalten, nachdem ersten Befehl muss möglicherweise erneut das Mysql Root Pw eingeben werden.

Zitat von console:

mysql -pUNLOCK TABLES;

quit;

Vorerst sind alle Schritte auf dem Master getan.

Weiter gehts mit der Konfiguration des Slaves:

Zitat von console:

mysql -u root -pEnter password:

CREATE DATABASE deine_datenbank;

quit;

Dies legt die Datenbank auf dem Slave als leere Datenbank an.

Jetzt muss das Datenbank Backup der Datenbank eingespielt werden, dieses muss vorher per nfs/http/ftp oä auf den Slave kopiert werden.

Zitat von console:

mysql -u root -p

deine_datenbank < masterdb.sql

Jetzt muss die my.cnf des Slave Servers angepasst werden:

Zitat von console:

server-id=2master-host=IP_MASTER

master-user=slaveuser

master-password=your_password

master-connect-retry=60

replicate-do-db=deine_datenbank

Nach dieser Ändeurng muss der Mysql Server auf dem Slave neugestartet werden:

Zitat von console:

/etc/init.d/mysql restart

Nun muss man auf die Mysql Console des Slave Servers und folgende Befehle ausführen:

( Der erste öffnet die Mysql Console und fragt möglicherweise nach einem Passwort )

Zitat von console:

mysql -pSLAVE STOP;

CHANGE MASTER TO MASTER_HOST=’IP_MASTER’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’your_password’, MASTER_LOG_FILE=’mysql-bin.003′, MASTER_LOG_POS=12345;

START SLAVE;

quit;

hier müssen die werte von oben die man beim Master Server mit SHOW MASTER STATUS; ermittelt hat eingesetzt werden.

Das wars schon,

wenn ihr auf beiden Servern phpmyadmin installiert habt könnt ihr gut sehen ob das ganze Verfahren klappt. Ich hab mal ein 2 Screenshots angefügt, links phpmyadmin des Masters, Rechts phpmyadmin des Slaves.

Related posts:

  1. Monitoring mit Munin
  2. Howto: XEN auf debian mit (amd64) kernel
  3. Howto: PHP Session mit memcached
  4. “The Adventures of Scaling”
  5. Serverübersicht