Replikation

MySQL, PostgreSQL, SQLite
d.goersch
Posts: 54
Joined: 2002-06-23 20:31
Location: Viersen

Replikation

Post by d.goersch » 2003-02-15 05:56

Moin,

da schon mehrfach danach gefragt wurde, hier meine Lösung zur Replikation von 2 MySQL-Datenbanken.

Folgendes Szenario lag bei mir vor:
Ich nutze als Nameserver nicht Bind, sondern PowerDNS. PowerDNS kann seine Daten aus einer MySQL (auch Oracle oder Psql) beziehen, leider beherrscht er aber noch kein Master/Slave-Verhalten.

Die erste Idee war, den Primary-NS und Secondary-NS die Daten aus ein und der selben MySQL beziehen zu lassen. Da die Datenbank aber auf dem Host des NS1 läuft, macht das ausfallsicherheitstechnisch gesehen wenig Sinn, da die Datenquelle für NS2 wegfallen würde, sobald NS1 sammt Datenbank ausfällt.
Die Lösung ist eine Slave-Datenbank, die ich aber nicht selber up2date halten möchte, sondern eine Replikation der Datenbank auf NS1 sein sollte, allerdings - dies war mir aus Traffic-Gründen wichtig - sollte nur die eine Datenbank für PowerDNS repliiziert werden, NICHT die gesammte MySQL.

Gegebenheiten:
PowerDNS auf Master
PowerDNS auf Slave
MySQL auf Master (mysqld Ver 3.23.51 for pc-linux-gnu on i686)
MySQL auf Slave (mysqld Ver 3.23.49 for pc-linux-gnu on i686)
Beide Systeme unter Debian (der Slave übrigens ein vd-Server von KoryPet, meiner Meinung nach für soetwas bestens geeignet!)
(Auf die Einrichtung von PowerDNS und der MySQL ansich gehe ich hier nicht weter ein.)

Als allererstes legte ich auf der Master-MySQL einen User für die Replikation an - bei mir 'replica'@'<host vom slave>' - einzig und allein mit der Berechtigung "FILE".

Dann erstell ich ein Dump der PowerDNS-DB 'pDNS' und spielte den auf der Slave-MySQL ein, da beide Datenbanken zu Beginn der Replikation auf dem selben Stand sein müssen.

In den Configs habe ich dann folgende Einträge hinzugefügt/geändert:

Master

Code: Select all

[mysqld]
set-variable    = long_query_time=1
server-id       = 1
log-bin         = /var/log/mysql/mysql-bin.log
binlog-do-db    = <Datenbank>
log-long-format
log-slow-queries
Slave

Code: Select all

[mysqld]
server-id       = 2
master-host     = <Host vom Master>
master-port     = 3306
master-user     = replica
master-pass     = <passwort>
log-bin         = /var/log/mysql/mysql-bin.log
binlog-do-db    = <Datenbank>
replicate-do-db = <Datenbank>
log-slave-updates
Danach habe ich zuerst die Master-MySQL danach die Slave-MySQL neugestartet und siehe da, gleich der erste Connect des Users 'replica' auf der Master-MySQL:

Code: Select all

030215  5:17:28      21 Connect     replica@<slavehost> on
                     21 Binlog Dump
Ja ich weiß, merkwürde Zeit soetwas zu machen, aber es hat mir keine Ruhe mehr gelassen und ich wollte meine Erfahrung auch gleich an euch weitergeben.
Ich fand das ganze unheimlich einfach und unheimlich praktisch, habs natürlich auch ausprobiert: Auf der Master-MySQL in der DB 'pDNS' einfach eine Tabelle erstellt mit irgendwelchen Einträgen, und siehe da, sofort auf der Slave-MySQL ist diese Tabelle vorhanden.

Hoffe damit ein wenig geholfen zu haben, Fragen hierzu bitte nicht per eMail oder PN sondern einfach hier im Forum, Danke.
Danke noch an Fritz, der mir mit sehr guter Dokumentation weitergeholfen hat!

cyberline
Posts: 97
Joined: 2003-01-28 10:11
Location: Hürth

Re: Replikation

Post by cyberline » 2003-02-17 09:11


floschi
Userprojekt
Userprojekt
Posts: 3247
Joined: 2002-07-18 08:13
Location: München

Re: Replikation

Post by floschi » 2003-02-17 09:25

Jo, Replikation ist mit mysql kinderleicht, danke für's Howto, dann brauch ich mich jetzt nimmer hinsetzen :lol:

djbennyf
Posts: 176
Joined: 2003-04-06 19:44

Re: Replikation

Post by djbennyf » 2003-04-13 13:18

Auszug aus "SHOW SLAVE STATUS" vom Slave:


Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter

fumedia.net replica 3306 60 0123456789.001 73 No 1062 error 'Duplicate entry '11778' for key 1' on query 'INSERT INTO session VALUES(NULL,'','1050230681','/black1.php','217.5.66.41')' 0

aufm master steht nichts bin beide howtos ausm forum durchgegangen