AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 17529
Accepted
Abdul Manaf
Abdul Manaf
Asked: 2012-05-08 06:14:12 +0800 CST2012-05-08 06:14:12 +0800 CST 2012-05-08 06:14:12 +0800 CST

Configurando a replicação circular no mysql

  • 772

Eu tenho 3 servidores MySQL, digamos A,B,C .

O que eu quero fazer é tornar todos eles mestres e escravos. Se houver atualização em qualquer um dos servidores MySQL, ela deve ser replicada para todos os servidores.

Estudei sobre a replicação circular e descobri que ela pode ser implementada com ela.

Alguém pode me dar todas as etapas para realizar a replicação conforme indicado entre três servidores.

Mais um ponto, também quero ignorar algumas das tabelas de um banco de dados.

Além disso, quais são as ressalvas desse tipo de replicação?

mysql replication
  • 2 2 respostas
  • 9916 Views

2 respostas

  • Voted
  1. Aaron Brown
    2012-05-08T17:35:49+08:002012-05-08T17:35:49+08:00

    Rolando disse como fazer e sua resposta é excelente. A verdade é que a replicação circular é uma ideia horrível, terrível, terrível. Não faça isso. Sempre. "Absolutos nunca são verdadeiros", mas, neste caso, é bem próximo.

    Em vez de ter um único ponto de falha, agora você tem três.

    E se um dos servidores cair? Agora a replicação está quebrada em todos os lugares.

    Como você o substitui facilmente e alinha as posições do log binário? Você não pode fazer isso sem fazer uma análise de log binário muito complicada e propensa a erros.

    Portanto, agora você precisa restaurar todos os três servidores de um backup. Espere, esse backup foi feito no mesmo momento? Não, porque não há como fazer um backup transacional em vários servidores. Então, você fica com a replicação quebrada e tentando consertá-la com pt-table-checksum e pt-table-sync... ou reconstruir todo o cluster do zero.

    Só porque você pode fazer algo, não significa que você deva. Não faça isso, sério. Eu não estou brincando.

    • 14
  2. Best Answer
    RolandoMySQLDBA
    2012-05-08T07:35:37+08:002012-05-08T07:35:37+08:00

    Para este exemplo, vamos supor o seguinte

    • ServidorA Endereço IP 10.1.1.20
    • ServidorB Endereço IP 10.1.1.30
    • ServidorC Endereço IP 10.1.1.40
    • Você criará um usuário para replicação
      • nome de usuárioreplicator@'10.1.1.%'
      • senhar3plic4t0R
    • O mestre do ServerA será o ServerC
    • O mestre do ServerB será o ServerA
    • O mestre do ServerC será o ServerB
    • Não há bancos de dados nos três servidores
    • Existem três tabelas para ignorar
      • db1.tb1
      • db2.tb2
      • db3.tb3

    Passo 01) Adicione essas opções em [mysqld] em /etc/my.cnf no ServerA

    [mysqld]
    server-id=20
    log-bin=mysql-bin
    relay-log=relay-bin
    log-slave-updates
    replicate-ignore-table=db1.tb1
    replicate-ignore-table=db2.tb2
    replicate-ignore-table=db3.tb3
    

    Passo 02) Adicione essas opções em [mysqld] em /etc/my.cnf no ServerB

    [mysqld]
    server-id=30
    log-bin=mysql-bin
    relay-log=relay-bin
    log-slave-updates
    replicate-ignore-table=db1.tb1
    replicate-ignore-table=db2.tb2
    replicate-ignore-table=db3.tb3
    

    Passo 03) Adicione essas opções em [mysqld] em /etc/my.cnf no ServerC

    [mysqld]
    server-id=40
    log-bin=mysql-bin
    relay-log=relay-bin
    log-slave-updates
    replicate-ignore-table=db1.tb1
    replicate-ignore-table=db2.tb2
    replicate-ignore-table=db3.tb3
    

    Passo 05) service mysql restartno ServidorA, ServidorB, ServidorC

    Etapa 06) Criar GRANT para usuário de replicação no ServidorA, ServidorB, ServidorC

    GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT
    ON *.* to replicator@'10.1.1.%'
    IDENTIFIED BY 'r3plic4t0R';
    

    Passo 07) Executar SHOW MASTER STATUS;no ServidorC

    Passo 08) Execute este CHANGE MASTER TOcomando no ServerA

    CHANGE MASTER TO
    MASTER_HOST='10.1.1.40',
    MASTER_PORT=3306,
    MASTER_USER='replicator',
    MASTER_PASSWORD='r3plic4t0R',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=<PositionNumberFromStep07>;
    

    Passo 09) Executar SHOW MASTER STATUS;no ServidorA

    Etapa 10) Execute este CHANGE MASTER TOcomando no ServerB

    CHANGE MASTER TO
    MASTER_HOST='10.1.1.20',
    MASTER_PORT=3306,
    MASTER_USER='replicator',
    MASTER_PASSWORD='r3plic4t0R',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=<PositionNumberFromStep09>;
    

    Etapa 11) Executar SHOW MASTER STATUS;no ServidorB

    Etapa 12) Execute este CHANGE MASTER TOcomando no ServerC

    CHANGE MASTER TO
    MASTER_HOST='10.1.1.30',
    MASTER_PORT=3306,
    MASTER_USER='replicator',
    MASTER_PASSWORD='r3plic4t0R',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=<PositionNumberFromStep11>;
    

    Etapa 13) START SLAVE;no ServidorA

    Etapa 14) Aguarde 5 segundos e, em seguida, SHOW SLAVE STATUS\Gno ServerA

    Se Slave_IO_Running=Yes e Slave_SQL_Running=Yes, a replicação está funcionando

    Etapa 15) START SLAVE;no ServidorB

    Etapa 16) Aguarde 5 segundos e, em seguida, SHOW SLAVE STATUS\Gno ServerB

    Se Slave_IO_Running=Yes e Slave_SQL_Running=Yes, a replicação está funcionando

    Etapa 17) START SLAVE;no ServidorC

    Etapa 18) Aguarde 5 segundos e, em seguida, SHOW SLAVE STATUS\Gno ServerC

    Se Slave_IO_Running=Yes e Slave_SQL_Running=Yes, a replicação está funcionando

    ATUALIZAÇÃO 2012-05-07 12:22 EDT

    A única razão para usar auto_increment_offset / auto_increment_increment nesta configuração seria fazer gravações em todos os mestres e leituras de qualquer mestre.

    Há apenas um cenário com esta configuração em que você não é obrigado a usar auto_increment_offset / auto_increment_increment :

    Para qualquer banco de dados mydb - Se você gravar em mydb apenas no ServidorA, leia de mydb no ServidorA - Se você gravar em mydb apenas no ServidorB, leia de mydb no ServidorB - Se você gravar em mydb apenas no ServidorC, leia de mydb no ServidorC

    • 8

relate perguntas

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve