Antecedentes : Eu tenho dois servidores MySQL 5.1 configurados na RBR (Master-Master-Based-Replication), seguindo este excelente guia . Desejo que todos os bancos de dados sejam replicados e adicionarei novos bancos de dados regularmente.
Objetivo : gostaria de poder adicionar novos bancos de dados à replicação apenas adicionando o banco de dados a um dos servidores; sem precisar parar os dois escravos, altere os arquivos de configuração, reinicie os servidores MySQL e inicie os escravos novamente.
Pergunta : Pelo que tenho lido, eu acho que posso fazer isso simplesmente omitindo nenhum binlog-do-db
, binlog-ignore-db
, replicate-do-db
, e replicate-ignore-db
ajustes na configuração de cada servidor, mas não posso ter certeza. Os documentos do MySQL sobre como as opções de replicação em nível de banco de dados e tabela são avaliadas me fazem pensar que pode não haver maneira de fazer isso.
Partes relevantes dos meus /etc/mysql/my.cnf
arquivos são copiadas 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
fonte
Respostas:
Foi assim que fiz para os dois mestres
fonte
log-slave-updates
configuração porque não via necessidade. Tudo funciona perfeitamente. Sou capaz de adicionar e soltar bancos de dados e as alterações são replicadas. Obrigado! Recompensa concedida.Com relação à criação de bancos de dados, ainda existem relatórios de erros sobre o uso de CREATE DATABASE com replicação baseada em linhas.
Este relatório está fechado, mas o bug apareceu novamente no MySQL 5.1.47.
Este relatório é baseado no MySQL Cluster (mecanismo de armazenamento NDB).
Este relatório é baseado na tabela replicate-wild-ignore-table que ainda está replicando.
A replicação baseada em linha faz com que os logs binários cresçam a uma taxa extraordinária, o que pode aumentar o tráfego da rede, enviando dados binários de log para os logs de retransmissão do escravo.
@ Mike diz que conseguiu a criação do banco de dados para funcionar e replicar muito bem. Eu não duvido disso. O que eu sou é um pouco de aprendizado do MySQL (eh Oracle), que não obteve todas as distorções da replicação baseada em linhas, uma vez que o banco de dados é instanciado.
Você pode mudar para row_format MIXED se ainda desejar entradas baseadas em linha nos logs binários. Internamente, o formato do log binário tende a flutuar entre a instrução e a correção de qualquer maneira: (Consulte http://bugs.mysql.com/bug.php?id=40146 ). Mais relatórios de bugs são fechados usando mistos e ocultando os baseados em linhas ( http://bugs.mysql.com/bug.php?id=39701 ), mas ainda assim os problemas persistem intermitentemente.
NOTA FINAL
Para sua própria sanidade, volte à replicação baseada em instruções e, assim, torne CREATE DATABASE (que é uma instrução SQL) estável e consistente para SQL subsequente no banco de dados criado. De fato, o relatório de erro 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.
fonte
Hmm ... Você também precisará descobrir uma maneira de manipular / diferenciar campos e chaves incrementadas automaticamente. Isso parece interessante .. http://mysql-mmm.org/
fonte
auto-increment-increment
eauto-increment-offset
nos meus arquivos de configuração. Veja esta página: dev.mysql.com/doc/refman/5.1/en/…cmiiw Eu pensei que você deveria ser capaz de criar banco de dados em master1 e master2 sem alterar o conf ou parar o slave, mas verifique se a replicação master - master está em execução. porque você não define qual banco de dados precisa replicar, significa que todo o banco de dados será replicado se você não o definir em my.cnf.
fonte