então criei uma replicação multi-mestre com servidores abaixo dois para mestre e dois para escravo.
nome do host: master-1 ip: 192.168.120.107
nome do host: master-2 ip: 192.168.120.111
nome do host: slave-1 ip: 192.168.120.117
nome do host: slave-2 ip: 192.168.120.118
os dois mestres (mestre-1, mestre-2) são implantados como replicação ativo-ativo e funcionam bem e abaixo estão os arquivos de configuração /etc/mysql/my.cnf
:
mestre-1:
[mysqld]
#
# * Basic Settings
#
server-id = 1
user = root
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
log-bin = master-bin
log-bin-index = master-bin.index
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
skip-external-locking
mestre-2:
[mysqld]
#
# * Basic Settings
#
server-id = 2
user = root
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
log-bin = master-bin
log-bin-index = master-bin.index
relay-log = relay-log-bin
relay-log-index = relay-log-bin.index
skip-external-locking
mestres funcionam bem. os dois escravos são conectados aos mestres assim: escravo-1 é o escravo do mestre-1 e escravo-2 é o escravo do mestre-2. e estes são os arquivos de configuração:
escravo-1:
[mysqld]
#
# * Basic Settings
#
server-id = 3
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
skip-external-locking
escravo-2:
[mysqld]
#
# * Basic Settings
#
server-id = 4
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
skip-external-locking
quando um mestre faz alterações no banco de dados, seus escravos alteram dois, isso significa que funciona bem, por exemplo, quando mestre-1 altera o banco de dados, as alterações serão replicadas para mestre-2 e escravo-1 e as alterações também serão feitas neles. meu problema é que preciso que as mudanças aconteçam em todos os escravos, por exemplo, quando mestre-1 altera o banco de dados, escravo-2 altera seu banco de dados como mestre-2 e escravo-1. como posso fazer isso acontecer?
Olhando para sua configuração, parece que você está faltando
log-slave-updates
em seus arquivos my.cnf.Você precisará adicionar isso aos dois
my.cnf
arquivos mestres e reiniciá-los.Isso diz ao banco de dados escravo para pegar qualquer coisa que receba de seu mestre e copiar do log de retransmissão para o log binário para que possa ser replicado posteriormente.
por exemplo
Mestre 1 Atualiza uma tabela. Ele é gravado no log binário em Master1
Isso é replicado para os escravos do Mestre 1 (que são o escravo 1 e o Mestre2)
Para que ele prossiga para o escravo 2, o mestre 2 deve ser informado para adicioná-lo ao seu log binário. Isto é o que
log-slave-updates
faz.