Un esclave MySQL peut-il être un maître en même temps?

17

Je suis en train de migrer 2 serveurs DB (maître et esclave) vers deux nouveaux serveurs DB (maître et esclave)

DB1 - Master (production)

DB2 - Esclave (production)

DB3 - Nouveau maître

DB4 - Nouvel esclave

Actuellement, la réplication est configurée comme suit:

DB1 -> DB2
DB3 -> DB4

Pour obtenir les données de production répliquées sur les nouveaux serveurs, j'aimerais les "chaîner" pour qu'elles ressemblent à ceci:

DB1 -> DB2 -> DB3 -> DB4

Est-ce possible? Lorsque je show master status;tourne sur DB2 (l'esclave de production), la possession binlog ne semble jamais changer:

+ ------------------ + ---------- + -------------- + ---- -------------- +
| Fichier | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+ ------------------ + ---------- + -------------- + ---- -------------- +
| mysql-bin.000020 | 98 | | |
+ ------------------ + ---------- + -------------- + ---- -------------- +

Je suis un peu confus quant à la raison pour laquelle la position binlog ne change pas sur DB2, Idéalement, ce sera le maître de DB3.

mmattax
la source

Réponses:

16

Le binlog sur DB2ne mettait pas à jour les mises à jour des esclaves. Pour chaîner la réplication en guirlande, il faut définir log-slave-updatesdans my.conf.

http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_log-slave-updates

mmattax
la source
Mais ensuite, vous écrivez les journaux deux fois, une fois dans les journaux de relais et une fois dans les fichiers binlog. Pourquoi ne pas répliquer à partir de l'esclave à l'aide des journaux de relais?
hpaknia
9

Oui, c'est possible :) Cela s'appelle la réplication "Master with Relay Slave" et il y a beaucoup de documents à ce sujet sur le net.

Je vous recommande de jeter un œil à la documentation officielle ici .

Btw, jetez également un œil à ces diapositives . Ils ont quelques conseils sur les topologies de réplication.

J'espère que cela t'aides.

Marco Ramos
la source
3

oui - vous pouvez chaîner des serveurs mysql en guirlande, vous pouvez même faire une réplication circulaire avec deux machines ou plus. n'oubliez pas d'activer le binloging sur l'esclave qui agit également comme maître.

pQd
la source
1
La réplication circulaire est incroyablement fragile. C'est mal avisé dans la plupart des circonstances.
Warner
@Warner - ce n'était qu'un exemple de configuration de réplication encore plus compliquée.
pQd
Les amis ne laissent pas les serveurs mysql en guirlande d'amis.
sjas
@sjas, sauf s'ils ont une raison très spécifique de le faire et comprennent les conséquences potentielles de la rupture de la chaîne.
pQd
Désolé, mais toujours pas. La complexité vous hante toujours plus tard.
sjas
0

Oui c'est possible. De façon réaliste, vous avez besoin d'un nouvel instantané de DB2 pour créer DB3. À ce stade, si vous avez une bonne position, vous pouvez soit utiliser que pour DB4 ou prendre un autre instantané de DB3.

N'oubliez pas de définir un unique server_idpour chaque serveur.

High Performance MySQL est un excellent livre pour référencer une administration MySQL plus avancée.

Warner
la source
DB2 n'est actuellement qu'un esclave, mais sa position dans le binlog ne change pas ... Savez-vous si c'est normal?
mmattax
L'esclave (DB2) est à jour avec le maître, mais la position binlog ne change pas, que dois-je vérifier?
mmattax
Oui, j'ai confirmé que je peux modifier les données sur DB1 et qu'elles sont répliquées sur DB2, mais la position binlog de DB2 est la même.
mmattax
Je pense que DB @ n'enregistre
mmattax
0

Pourquoi ne pas simplement ajouter DB3 en tant que nouvel esclave, puis le promouvoir en tant que maître lorsque vous êtes prêt à effectuer le changement? Cela vous donnerait l'avantage supplémentaire temporaire d'avoir plusieurs esclaves, et de réduire ou d'éliminer votre temps d'arrêt.

phuzion
la source
c'est exactement ce que je fais ...
mmattax