Kapitel 5: MySQL-Datenbankadministration 309
5.10.4 Replikationsfeatures und bekannte Probleme
Unten steht eine Erl¨auterung dessen, was unterst¨utzt wird und was nicht:
• Replikation l¨auft korrekt mit AUTO_INCREMENT-, LAST_INSERT_ID- und TIMESTAMP-
Werten.
• RAND() bei Updates repliziert nicht korrekt. Benutzen Sie RAND(ein_nicht_zufalls_
ausdruck), wenn Sie Updates mit RAND() replizieren. Sie k¨onnen zum Beispiel UNIX_
TIMESTAMP() als Argument f¨ur RAND() benutzen.
• Sie m¨ussen auf Master und Slave denselben Zeichensatz (--default-character-set)
benutzen. Wenn nicht, erhalten Sie eventuell Fehler wegen doppelter Schl¨usseleintr¨age
(duplicate key) auf dem Slave, weil ein Schl¨ussel, der auf dem Master als eindeutig
betrachtet wird, das in einem anderen Zeichensatz eventuell nicht ist.
• LOAD DATA INFILE wird korrekt gehandhabt, solange die Datei zur Zeit der
Update-Ausf¨uhrung noch auf dem Master-Server liegt. LOAD LOCAL DATA INFILE wird
¨ubersprungen.
• Aktualisierungsanfragen, die Benutzer-Variablen benutzen, sind (noch) nicht replika-
tionssicher.
• FLUSH-Befehle werden nicht in der Bin¨ar-Log-Datei gespeichert und werden deswegen
nicht auf den Slaves repliziert. Das stellt normalerweise kein Problem dar, weil FLUSH
nichts ¨andert. In Bezug auf die MySQL-Berechtigungstabellen heißt das jedoch, dass
Sie bei direkten
¨
Anderungen in diesen Tabellen ohne Benutzung des GRANT-Statements
und der anschließenden Replikation der MySQL-Berechtigungs-Datenbank auf den Slaves
FLUSH PRIVILEGES ausf¨uhren m¨ussen, damit die neuen Berechtigungen wirksam wer-
den.
• Tempor¨are Tabellen werden ab Version 3.23.29 korrekt repliziert, ausgenommen im
Fall, dass Sie den Slave-Server schließen (nicht nur den Slave-Thread), Sie noch einige
tempor¨are Tabellen offen haben und diese bei nachfolgenden Aktualisierungen benutzt
werden. Um mit diesem Problem fertig zu werden, schließen Sie den Slave mit SLAVE
STOP und pr¨ufen dann die Slave_open_temp_tables-Variable, um zu sehen, ob Sie 0
ist. Dann f¨uhren Sie mysqladmin shutdown aus. Wenn die Variable nicht 0 ist, starten
Sie den Slave-Thread neu mit SLAVE START und probieren es noch einmal. Zuk¨unftig
(ab Version 4.0) wird es eine sauberere L¨osung geben. In fr¨uheren Versionen wurden
tempor¨are Tabellen nicht korrekt repliziert. Wir empfehlen, dass Sie entweder auf
eine neuere Version aktualisieren oder vor allen Anfragen mit tempor¨aren Tabellen SET
SQL_LOG_BIN=0 auf alle Clients ausf¨uhren.
• MySQL unterst¨utz nur einen Master und viele Slaves. In Version 4.x wird ein Abstim-
mungsalgorithmus eingebaut, der automatisch den Master umschaltet, wenn etwas mit
dem aktuellen Master schief geht. Ausserdem werden wir ’Agenten’-Prozesse einf¨uhren,
die bei der Lastverteilung helfen, indem sie SELECT-Anfragen an verschiedene Slaves
senden.
• Ab Version 3.23.26 ist es sicher, Server in einer zirkul¨aren Master-Slave-Beziehung
mit angeschaltetem log-slave-updates zu verbinden. Beachten Sie jedoch, dass bei
dieser Art von Einrichtung viele Anfrage nicht richtig funktionieren, es sei denn, Ihr
Client-Code ist so geschrieb en, dass er sich um m¨ogliche Probleme k¨ummert, die durch
Comentarios a estos manuales