MySQL Master-Master Replicação de TODOS os bancos de dados. Como?

15

Plano de fundo : Eu tenho dois servidores MySQL 5.1 configurados na replicação baseada em linha do Master-Master (RBR) seguindo este excelente guia . Eu quero todos os bancos de dados replicados e adicionarei novos bancos de dados regularmente.

Meta : gostaria de poder adicionar novos bancos de dados à replicação apenas adicionando o banco de dados a um dos servidores; sem ter que parar ambos os escravos, mudar os arquivos de configuração, reiniciar os servidores MySQL e iniciar os escravos novamente.

Pergunta : Pelo que li, acho que posso fazer isso simplesmente omitindo binlog-do-db , binlog-ignore-db , replicate-do-db e replicate-ignore-db configurações na configuração de cada servidor, mas não tenho certeza. Os documentos do MySQL sobre como Database- e Tabela- são avaliadas e me fazem pensar que talvez não haja uma maneira de realizar isso em tudo.

Porções relevantes dos meus arquivos /etc/mysql/my.cnf são copiados abaixo. Estou no caminho certo? O que eu quero é possível?

Mestre 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

Mestre 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
    
por Andrew Ensley 11.05.2011 / 17:09

4 respostas

16

É assim que eu fiz isso para os dois mestres

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
    
por 17.05.2011 / 16:54
4

No que diz respeito à criação de bancos de dados, ainda há relatórios de bugs sobre o uso de CREATE DATABASE com replicação baseada em linha.

Este relatório está fechado, mas o bug apareceu novamente no MySQL 5.1.47
< a href="http://bugs.mysql.com/bug.php?id=11143"> Este relatório é baseado no MySQL Cluster (mecanismo de armazenamento NDB)
Este relatório é baseado na replicate-wild-ignore-table que ainda está sendo replicada.

A replicação baseada em linha faz com que os logs binários cresçam a uma taxa extraordinária, o que pode elevar o tráfego de rede apenas enviando dados de log binários para os logs de retransmissão do escravo.

@Mike diz que conseguiu que a criação do banco de dados funcione e se replique bem. Eu não duvido disso. O que eu sou é um pouco suspeito de que o MySQL (eh Oracle) não tenha tirado todos os detalhes da replicação baseada em linha depois que o banco de dados é instanciado.

Você pode querer mudar para row_format MIXED se ainda quiser entradas com base em linha nos logs binários. Internamente, o formato de log binário tende a flutuar entre a declaração e a fixada de qualquer maneira: (Consulte o link ). Mais relatórios de bugs são fechados usando misturados e afastando-se do link , mas os problemas persistem intermitentemente .

NOTA FINAL

Para sua própria sanidade, reverta de volta para a replicação baseada em instruções e, assim, crie CREATE DATABASE (que é uma instrução SQL ) estável e consistente para o SQL subsequente no banco de dados criado. Na verdade, o relatório de erros mais recente mostra que é melhor usar a replicação baseada em instruções, independentemente do que a documentação diz sobre as opções no nível do banco de dados e no nível da tabela.

    
por 18.05.2011 / 19:34
0

Hmm ... Você também terá que descobrir uma maneira de manipular / diferenciar teclas e campos auto-incrementados. Isso parece interessante .. link

    
por 19.05.2011 / 06:40
-1

cmiiw Eu pensei que você deveria ser capaz de criar banco de dados em master1 e master2 sem alterar o conf ou parar o escravo, mas certifique-se de que a replicação master-master está em execução. porque você não define qual banco de dados precisa ser replicado, significa que todo o banco de dados será replicado se você não o definir em my.cnf.

    
por 12.05.2011 / 10:13