Contexte : J'ai deux serveurs MySQL 5.1 configurés en réplication basée sur les lignes Master-Master (RBR) en suivant cet excellent guide . Je veux que toutes les bases de données soient répliquées et j'ajouterai régulièrement de nouvelles bases de données.
Objectif : je voudrais pouvoir ajouter de nouvelles bases de données à la réplication en ajoutant simplement la base de données à l'un des serveurs; sans avoir à arrêter les deux esclaves, modifier les fichiers de configuration, redémarrer les serveurs MySQL et redémarrer les esclaves.
Question : D'après ce que je l' ai lu, je pense que je peux le faire simplement en omettant tout binlog-do-db
, binlog-ignore-db
, replicate-do-db
et les replicate-ignore-db
paramètres de configuration de chaque serveur, mais je ne peux pas être sûr. Les documents de MySQL sur la façon dont les options de réplication au niveau de la base de données et de la table sont évaluées me font penser qu'il n'y a aucun moyen d'y parvenir.
Les parties pertinentes de mes /etc/mysql/my.cnf
fichiers sont copiées ci-dessous. Suis-je sur la bonne voie? Est-ce que je veux même possible?
Master 1 :
[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60
log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
Master 2 :
[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60
log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
la source
Réponses:
Voilà comment je l'ai fait pour les deux maîtres
la source
log-slave-updates
réglage car je n'en voyais pas la nécessité. Tout fonctionne parfaitement. Je peux ajouter et supprimer des bases de données et les modifications sont répliquées. Je vous remercie! Bounty décerné.En ce qui concerne la création de bases de données, il existe toujours des rapports de bogues sur l'utilisation de CREATE DATABASE avec la réplication basée sur les lignes.
Ce rapport est fermé, mais le bogue est réapparu dans MySQL 5.1.47
Ce rapport est basé sur MySQL Cluster (moteur de stockage NDB)
Ce rapport est basé sur replicate-wild-ignore-table toujours en cours de réplication.
La réplication basée sur les lignes fait augmenter les journaux binaires à un rythme extraordinaire qui peut augmenter le trafic réseau simplement en envoyant des données de journaux binaires aux journaux de relais de l'esclave.
@Mike dit qu'il a réussi à créer et à répliquer la base de données. Je n'en doute pas du tout. Ce que je suis, c'est un peu méfiant de MySQL (eh Oracle) n'ayant pas éliminé tous les défauts de la réplication basée sur les lignes une fois la base de données instanciée.
Vous souhaiterez peut-être basculer vers row_format MIXED si vous souhaitez toujours des entrées basées sur des lignes dans les journaux binaires. En interne, le format de journal binaire a tendance à flotter entre instruction et fixe de toute façon: (Voir http://bugs.mysql.com/bug.php?id=40146 ). Plus de rapports de bogues sont fermés en utilisant des méthodes mixtes et en évitant les lignes ( http://bugs.mysql.com/bug.php?id=39701 ) mais les problèmes persistent toujours par intermittence.
NOTE FINALE
Pour votre propre raison, veuillez revenir à la réplication basée sur les instructions et ainsi rendre CREATE DATABASE (qui est une instruction SQL) stable et cohérente pour le SQL suivant par rapport à la base de données créée. En fait, le rapport de bogue le plus récent montre qu'il est préférable d'utiliser la réplication basée sur les instructions, indépendamment de ce que la documentation dit sur les options au niveau de la base de données et de la table.
la source
Hmm ... Vous devrez également trouver un moyen de gérer / différencier les clés et les champs auto-incrémentés. Cela semble intéressant .. http://mysql-mmm.org/
la source
auto-increment-increment
etauto-increment-offset
dans mes fichiers de configuration. Voir cette page: dev.mysql.com/doc/refman/5.1/en/…cmiiw j'ai pensé que vous devriez pouvoir créer une base de données sur master1 et master2 sans changer la conf ou arrêter l'esclave, mais assurez-vous que la réplication maître-maître fonctionne. parce que vous ne définissez pas la base de données à répliquer, cela signifie que toute base de données sera répliquée si vous ne la définissez pas sur my.cnf.
la source