web-dev-qa-db-fra.com

MySQL Master-Master Replication de toutes les bases de données. Comment?

Arrière-plan : J'ai deux serveurs MySQL 5.1 Configuration des serveurs MySQL dans la version à base de lignes principale (RBR) suivant ce excellent guide . Je veux que toutes les bases de données répliquées et ajouteront régulièrement de nouvelles bases de données.

objectif : J'aimerais pouvoir ajouter de nouvelles bases de données à la réplication en ajoutant simplement la DB à l'un des serveurs; Sans Dès avoir à arrêter les esclaves, modifiez les fichiers de configuration, redémarrez les serveurs MySQL et recommencez les esclaves.

Question : D'après ce que j'ai lu, je pense Je peux le faire en omettant simplement binlog-do-db, binlog-ignore-db, replicate-do-db, et replicate-ignore-db Paramètres dans la configuration de chaque serveur, mais je ne peux pas être sûr. Les documents de MySQL sur la manière --- Base de données - et Table - Les options de réplication de niveau sont évaluées faites-moi de penser qu'il pourrait ne pas y avoir de moyen de l'accomplir du tout.

Portions pertinentes de mon /etc/mysql/my.cnf Les fichiers sont copiés 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
16
Andrew Ensley

C'est comme ça que je l'ai fait pour les deux maîtres

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin
17
Mike

En ce qui concerne la fabrication de bases de données, il existe toujours des rapports de bogues sur l'utilisation de la base de données Créer une réplication à base de lignes.

Ce rapport est fermé, mais le bogue est apparu à nouveau dans MySQL 5.1.47
[.____] Ce rapport est basé sur le cluster MySQL (moteur de stockage NDB)
[.____] Ce rapport est basé sur une table de reproduction-sauvage-ignore toujours reproduit.

La réplication à base de lignes entraîne une croissance des bûches binaires à un tarif extraordinaire qui peut accroître le trafic réseau de SPIKE qui expédient des données de journal binaires sur les journaux relais de l'esclave.

@Mike dit qu'il a eu la création de la base de données pour travailler et se répliquer bien. Je ne doute pas du tout. Ce que je suis, c'est un peu haut de MySQL (EH Oracle) qui n'a pas eu tous les kinks hors de la réplication à base de lignes une fois la base de données instanciée.

Vous voudrez peut-être passer à Row_Format mélangé si vous souhaitez toujours des entrées en ligne dans les journaux binaires. En interne, le format de journal binaire a tendance à flotter entre relevé et fixé de toute façon: (voir http://bugs.mysql.com/bug.php?id=40146 ). Plus de rapports de bugs sont fermés à l'aide de mixtes et de blinder à base de lignes (- http://bugs.mysql.com/bug.php?id=39701 ) mais les problèmes toujours persistent par intermittence.

Note finale

((( pour votre propre santé mentale, veuillez revenir à la réplication basée sur la déclaration et faire donc créer une base de données (qui est une instruction SQL) stable et cohérente pour les SQL suivant contre la base de données créée. Dans Fait, le rapport de bogue le plus récent montre qu'il est préférable d'utiliser la réplication basée sur la déclaration, quelle que soit la documentation indiquant les options de niveau de base de données et de niveau de la table.

4
RolandoMySQLDBA

Hmm ... vous devrez également comprendre un moyen de gérer/différencier les clés et les champs incrémentés automatiquement. Cela semble intéressant .. http://mysql-mmm.org/

0
Nandhini Anand