MySQL Replication ohne Ausfall

Spinx

New Member
Hallo,

ich muss im Livebetrieb 181 Tabellen von Server 1 auf Server 2 bekommen, praktisch in Echtzeit. Änderungen auf Server 1 solten auch direkt auf Server 2 verfügbar sein. Wirs zb ein Eintrag gelöscht sollte dieser auch auf Server durch geführt werden.

Kurz gesagt, ALLES was auf Server 1 in der DB geschieht muss af Server 2 in Echtzeit geschehen.

Als erstes kam mir MySQL Replication in den Sinn. Allerdings habe ich nun mehrfach gelesen das dabei die MySQL DB von Server 1 nicht mehr beschreibbar ist. Dies kann ich mir natürlich nicht erlauben.
Gibt es einen Weg dies zu umgehen oder sollte ich da einen anderen Weg einschlagen?
 
Allerdings habe ich nun mehrfach gelesen das dabei die MySQL DB von Server 1 nicht mehr beschreibbar ist.
Mysql ist eine Master-Slave Replikation. D.h. ein Server (der Master) kann Schreib-Befehle ausführen während alle anderen Server der Replikations-Gruppe nur Lese-Befehle ausführen können.
Je nachdem wie das Setup aufgebaut wird ist also entweder Server1 oder Server2 beschreibbar.

Bitte gib an was genau du vorhast. Falls Entlastung des Systems dein Ziel ist so könntest du alle SELECT-Anweisungen vom Slave bearbeiten lassen und nur die UPDATE/INSERT vom Master. Dank mysql-proxy sollte das recht transparent möglich sein.
Alternativ kann es aber auch schon sein dass zB der Einbau von SSD(s) den Bedarf eines Zweitservers irrelevant macht...

Echtzeit ist Replikation übrigens nie und zumal Mysql kann mal recht weit hinterherhinken.
Cluster-Datenbanken wäre hier ein passender Ansatz, sei es Mysql-Cluster oder eine der unzähligen NoSQL-Datenbanken wie der BigTable-Nachbau Hadoop HBase
 
Du brauchst also eine Replikation/einen Cluster mit de Garantie, dass keine Transaktion verloren geht, richtig? Damit fällt die klassiche MySQL-Replikation aus, weil diese immer etwas hinterherhinkt. Und ja, im Regelfall kann man nur eine Seite als Master (zum Schreiben) benutzen.

In MySQL 5.5. wurde semi-synchrone Replikation eingeführt.
https://blogs.oracle.com/MySQL/entry/mysql_55_whats_new_in_replication
Ob das deinen Anforderungen entspricht musst Du vielleich mal selber nachlesen.

Es gibt auf Basis von MySQL dann noch den Galera-Cluster
http://codership.com/
Der bietet synchrone multi-Master-Replikation.

Das Percona-Toolkit (früher Maatkit) sei hier auch noch erwähnt, weil es einem die Arbeit mit Replikation erleichtert:
http://www.percona.com/software/percona-toolkit

schöne Grüße,
Nils
 
mysql-cluster mit ndbcluster als Engine. Simples Loadbalancing mit ldirectord. Hat allerdings alles auch Vor- und Nachteile. Bisher mußten alle Projekte seitens der Coder angepasst werden.

Alleine, ohne entsprechendes Know How ist hier sehr schnell das Licht wieder aus.

Ansonsten ist son Setup schon recht robust wenn man weiß was man tut.
 
Hallo,

erstmal Danke für eure Informationen.

In erster Linie geht es mir darum das wenn der MySQL Server ausfällt wird in der Firma dennoch weiter Arbeiten können.
Dabei soll nicht bei einem Ausfall der Server 2 sofort die Aufgaben übernehmen sondern laut Angaben des Chefs sollen wir in der eingesetzten Software "manuell :eek: " die neuen Zugangsdaten eintragen.
Warum verstehe ich zwar immer noch nicht aber was er sagt wird gemacht.

Die Datenbank umfasst knapp 10GB Daten.

Server 1 soll weiterhin Lesen/Schreiben können wärend auf Server 2 gleichzeitig geschrieben werden soll (INSERT, UPDATE, DELETE)
Ich denke Master/Master-Replikation wäre in dem Fall das richtige.

Die Möglichkeit 2 wäre noch. Ein einmaliges Backup auf Server 2 einspielen und die Software so anpassen das diese alle SQL Befehle auf 2 Datenbankenausführt.
 
Master/Master ist unkritisch, wenn du eh nur auf einen Master gleichzeitig schreibst.

Alternativ kannst du auch Master/Slave-Replikation wählen und im Falle eines Ausfalls den Slave zum Master ernennen.

Es gibt zahlreiche Wege :)
 
So, ich habe mich nun MySQL Replikation entschieden.

Mit diesem http://www.thomas-krenn.com/de/wiki/MySQL_Replikation klappte dies auf einem Server. Alle Datenbanken etc von Server A auf Server B automatisch zu übertragen.

Allerdings hat sich die Sache nun etwas geändert.

Vom Liveserver soll lediglich eine Datenbank auf 2 andere Server relpiziert werden. Dazu habe ich leider kein Passendes Howto gefunden. Das oben Verlinkt macht dies ja nur von Server A auf B mit allen Datenbanken und nicht von Server A auf B & C mit nur 1 Datenbank.

Habt ihr dort evtl ein Howto?
 
Auf dem Master:
Code:
binlog-do-db = meine_datenbank

Auf dem Slave:
Code:
replicate-do-db = meine_datenbank
 
Oh, doch so einfach. Danke.

Haut das Howto oben auch mit 2 Slave Servern hin? Muss ich da was beachten oder beide wie dort beschrieben als Slave einstellen?
 
Wunderbar.

Es funktioniert nun, allerdings habe ich ein Problem.
Nachdem ich auf beiden Slave den einmaligen import gemacht habe erhallte ich bei beiden Slave Servern wärend einem MySQL Neustart

root@2:/var/www# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
root@2:/var/www# ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Auf beiden Server laufen die gleichen Versionen sammt Datenbanken etc. Gleiche User etc. Auch der user existstiert
 
Auf beiden Server laufen die gleichen Versionen sammt Datenbanken etc. Gleiche User etc. Auch der user existstiert
Genau das ist das Problem =)
Das Passwort des debian-sys-maint Users wird bei der Installation generiert.
Kopier die Datei /etc/mysql/debian.cnf des Master-Servers auf die Replikatoren oder pass die entsprechende password-Zeile an.
 
Back
Top