MySQL: Replicação mestre-escravo do MySQL e arquitetura de…
Última atualização: 2026-08-26
A replicação mestre-escravo é a base da alta disponibilidade do MySQL — tanto a separação entre leitura e gravação quanto o failover dependem dela.
Esta aula explica os princípios e a configuração da replicação mestre-escravo.
1. O que você vai aprender
- Princípios da replicação mestre-escravo
- Configurar a replicação mestre-escravo
- Separação entre leitura e gravação
- Replicação semissíncrona
- Replicação em Grupo do MySQL
2. Uma história real
(1) Problema: Um único servidor não consegue lidar com a carga de leitura e gravação
Uma plataforma de comércio eletrônico possui apenas um servidor de banco de dados; portanto, durante grandes eventos de vendas, todas as solicitações de leitura e gravação se concentram em uma única máquina. As consultas sobre pedidos ficam lentas, as operações de gravação ficam em fila e a CPU atinge sua capacidade máxima — o banco de dados se torna o gargalo de todo o sistema. O que é ainda mais perigoso é que, se essa máquina parar de funcionar, todo o negócio fica completamente paralisado.
(2) Uma solução que utiliza replicação mestre-escravo e separação de leitura e gravação
Implementar a replicação mestre-escravo: as gravações são feitas no banco de dados mestre, e as leituras, no banco de dados escravo. Se o banco de dados mestre ficar fora do ar, o banco de dados escravo é promovido a mestre, garantindo a continuidade dos negócios.
| Dimensão | Servidor único | Replicação mestre-escravo + separação de leitura e gravação |
|---|---|---|
| Desempenho de leitura | Limite de um único servidor | Escalonamento horizontal (adição de bancos de dados escravos) |
| Desempenho de gravação | Conflito entre leitura e gravação | Banco de dados primário exclusivo para gravação |
| Disponibilidade | 99% | 99,9% |
| Recuperação de desastres | Recuperação manual (a cada hora) | Failover automático (a cada minuto) |
3. O Princípio da Replicação
graph LR
A[Master<br/>Primary Database] -->|binlog| B[Slave IO Thread]
B -->|relay log| C[Slave SQL Thread]
C -->|Replay| D[Slave Data<br/>Data from the database]
| Etapa | Descrição |
|---|---|
| 1 | O mestre grava no binlog |
| 2 | O thread de E/S do escravo extrai o binlog |
| 3 | Gravar no log de retransmissão local |
| 4 | O thread SQL escravo reproduz o log de retransmissão |
4. Configurando a replicação mestre-escravo
▶ Exemplo: Configuração principal
# my.cnf
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
-- Create a replication user
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- View master status
SHOW MASTER STATUS;
▶ Exemplo: Configuração do escravo
# my.cnf
[mysqld]
server-id = 2
relay_log = relay-bin
-- Configure master-slave relationship
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
-- Start the slave database
START SLAVE;
-- Check slave database status
SHOW SLAVE STATUS\G
5. Separação das operações de leitura e gravação
graph TB
A[Applications] -->|Write| B[Master]
A -->|Read| C[Slave 1]
A -->|Read| D[Slave 2]
B -->|Replicate| C
B -->|Replicate| D
6. Replicação semissíncrona
-- Install the semi-synchronous plugin
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
| Método de cópia | Descrição |
|---|---|
| Replicação assíncrona | O mestre não aguarda a confirmação do escravo (padrão) |
| Replicação semissíncrona | Retorna somente após pelo menos um escravo confirmar o recebimento |
| Replicação síncrona completa | Todos os escravos devem confirmar (baixo desempenho) |
7. Replicação em Grupo do MySQL
-- Install the Group Replication plugin
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
-- Start Group Replication
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
❓ Perguntas Frequentes
P: O que devo fazer em relação à latência mestre-escravo? R: Verifique a rede, otimize transações grandes e utilize replicação paralela.
P: O que devo fazer se o banco de dados primário ficar fora do ar? R: Failover manual ou automático (MHA/Orchestrator/ProxySQL).
P: É possível ter vários mestres? R: A Replicação em Grupo oferece suporte ao modo multimestre, mas recomenda-se o modo de mestre único.
P: O que devo fazer se houver um atraso na replicação mestre-escravo? R: Realize leituras críticas no banco de dados mestre, utilize replicação semissíncrona, habilite a replicação paralela e otimize transações de grande porte.
P: O que devo fazer se o banco de dados primário ficar fora do ar? R: Promova um banco de dados secundário para primário, seja manualmente ou automaticamente, usando o MHA/Orchestrator.
📖 Resumo
- A replicação mestre-escravo realiza a sincronização de dados por meio do binlog → log de retransmissão
- A replicação assíncrona é o método padrão; a replicação semissíncrona é mais segura.
- Separação de leitura e gravação distribui a carga, sendo que o servidor primário lida com as gravações e o servidor secundário, com as leituras
- Replicação em Grupo implementa um cluster de alta disponibilidade
📝 Exercícios
-
Questão básica (Dificuldade: ⭐): Configure um ambiente de replicação mestre-escravo.
-
Problema avançado (Dificuldade ⭐⭐): Verifique a sincronização de dados entre mestre e escravo.
-
Desafio (Dificuldade: ⭐⭐⭐): Simule uma falha no banco de dados primário e execute uma transição manual para o banco de dados de reserva.