Ok, hier mal ne schnellanleitung zum einrichten einer MYSQL Replikation:
===============================================
zuerst benötigt man, man glaube es kaum, 2 funktionierende Mysql Server am besten auf 2 Maschinen :) Es sollten auch in etwa die gleichen Versionen sein. Also mit MySql 3 und 4 funktioniert es nicht.
zunächst mal geben wir folgende Befehle auf Server A ein:
GRANT FILE ON *.* TO replicate@<IP_MASTER_SERVER> IDENTIFIED BY '<PASSWORT>';
GRANT FILE ON *.* TO replicate@<IP_SLAVE_SERVER> IDENTIFIED BY '<PASSWORT>';
(Werte in <> sind zu ersetzen)
Danach wird die my.cnf auf Server A editiert:
im [mysqld] bereich wird
log-bin
master-host=<IP_SLAVE_SERVER>
master-user=replicate
master-password=<PASSWORT>
server-id=1
eingetragen.
Jetzt benötigen wir ein Abbild der Mysql Daten von Server A.
Dazu muß zunächst MySql beendet werden.
Danach geht man in den Ordner, wo die MySql Daten liegen, meist /var/lib/mysql.
Falls log-bin schon aktiv war, löschen wir alle *.bin Files und falls existent, error logs und die Datei master.info .
mit dem Befehl
tar -czf replikation.tar.gz *
erstellen wir einen Tarball mit den Datenbanken.
Danach kann Mysql auf Server A wieder gestartet werden.
Die Datei replikation.tar.gz holen wir mit wget oder per FTP auf Server B.
Auf Server B muß zunächt Mysql beendet und der bestehende Inhalt des Datendirs von Mysql gelöscht werden. danach entpacken wir den File mit
tar -xzf replikation.tar.gz
und setzen die datei und gruppenrechte auf den des MySql users und ändern die Zugriffsrechte der Dateien rekursiv auf 660 und die der Ordner auf 770.
Auf Server B erweitern wir die my.cnf im [mysqld] bereich wie folgt:
log-bin
master-host=<IP_MASTER_SERVER>
master-user=replicate
master-password=<PASSWORT>
server-id=2
Wenn man nun auf Server B MySql wieder startet sollten die beiden Server sich gegenseitig Ihre Datenbestände updaten.
eine Entsprechende PHP Funktion zum nutzen der Replikation hat der Autor auch vorgesehen:
<?
/********************************************************
function db_connect_plus()
returns a link identifier on success, or false on error
********************************************************/
function db_connect_plus(){
$username = "<MYSQL_BENUTZER>";
$password = "<MYSQL_PASSWORT>";
$primary = "<IP_MASTER_SERVER>";
$secondary = "<IP_SLAVE_SERVER>";
$timeout = 15; // timeout in seconds
if($fp = fsockopen($primary, 3306, &$errno, &$errstr, $timeout)){
fclose($fp);
return $link = mysql_connect($primary, $username, $password);
}
if($fp = fsockopen($secondary, 3306, &$errno, &$errstr, $timeout)){
fclose($fp);
return $link = mysql_connect($secondary, $username, $password);
}
return 0;
}
?>
ACHTUNG: nach eigener Erfahrung sollte man darauf verzichten, die Scripte auf beide Mysql Server zu verteilen, um eine Art Load Balancer System aufzubauen, da es passieren kann, das ein Script einen Eintrag auf Server A mit auto_id setzt und gleichzeitig ein Script auf Server B in der gleichen DB den selben Key verwendet was zur Trennung der Verbindung führt. Die Replikation sollte nur dazu verwendet werden, wenn ein Server ausfällt oder man nutzt Server A für INSERTS UPDATES etc und Server B für SELECT etc. Den Status der Replikation kann man mit
SHOW SLAVE STATUS
auf beiden Servern abfragen.
===============================================
P.S.: der Englische Originalartikel von Michael Tanoviceanu ist hier zu finden:
http://www.phpbuilder.com/columns/tanov ... 00912.php3