Guia de Alta Disponibilidade: Dominando a Replicação no MySQL

Guia de Alta Disponibilidade: Dominando a Replicação no MySQL

A criação de replicação em banco de dados é um aspecto fundamental para garantir a disponibilidade, escalabilidade e integridade dos dados. A replicação permite que os dados sejam copiados de um servidor (o mestre) para um ou mais servidores (réplicas), o que traz diversas vantagens:

Alta Disponibilidade: Com a replicação, se o servidor mestre falhar, os servidores réplicas podem assumir rapidamente, minimizando o tempo de inatividade.

Desempenho Melhorado: A carga de leitura pode ser distribuída entre vários servidores slaves, permitindo que o servidor mestre se concentre nas operações de gravação. Isso é particularmente é útil em aplicações com alta demanda de leitura.

Backup e Recuperação: Os servidores réplicas podem ser utilizados para realizar backups sem impactar o desempenho do servidor mestre, garantindo que os dados estejam sempre disponíveis.

Escalabilidade: À medida que a demanda por dados aumenta, novos servidores réplicas podem ser adicionados facilmente à arquitetura, permitindo que o sistema escale horizontalmente.

Segurança dos Dados: A replicação pode ser configurada para replicar dados em locais geograficamente distintos, proporcionando uma camada extra de segurança em caso de desastres naturais ou falhas de hardware.

Testes e Desenvolvimento: Servidores slaves podem ser utilizados para testes e desenvolvimento, permitindo que os desenvolvedores trabalhem com uma cópia dos dados reais sem afetar a produção.
Em suma, a replicação no MySQL é uma prática essencial para a construção de sistemas robustos e confiáveis, garantindo que os dados estejam sempre disponíveis e acessíveis, além de permitir uma melhor gestão de recursos e desempenho.

Então vamos lá criar uma replicação no MySQL?
Mão na massa galera!

Neste exemplo vamos usar a o Ubuntu Server e MySQL 8 nas duas máquinas virtuais.
• Master: 192.168.1.105
• Slave: 192.168.1.112

As instâncias do MySQL devem ser capazes de se comunicar entre si. Verifique as configurações de firewall e rede para garantir que as portas necessárias estejam abertas (porta 3306).

Vamos as Configurações!

No seu master

# MASTER

vim /etc/mysql/mysql.conf.d/mysqld.cnf

server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 100M
log_slave_updates = 1
auto-increment-increment = 2
auto-increment-offset = 1

bind-address = 192.168.1.112 #IP do Slave

# SLAVE

server_id = 2
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 100M
log_slave_updates = 1
auto-increment-increment = 2
auto-increment-offset = 2

bind-address = 192.168.1.105 #IP do seu Master

#parâmetros adicionados:

server_id:

Este parâmetro é um número inteiro que identifica de forma única cada servidor em um ambiente de replicação
log_bin:

Este parâmetro habilita o log binário no servidor. O log binário registra todas as alterações feitas no banco de dados essencial para a replicação, pois permite que o slave replique essas alterações.
log_bin_index:

Este parâmetro define o nome do arquivo de índice do log binário.
O índice armazena a lista de arquivos de log binário que foram gerados, facilitando a gestão e o acesso a esses arquivos. Se não especificado, um nome padrão será gerado.

relay_log:
O relay_log é o arquivo onde os dados do log binário do mestre são armazenados no SLAVE.

relay_log_index:

Semelhante ao log_bin_index, o relay_log_index define o nome do arquivo de índice do log Esse índice rastreia os arquivos de log de relé que foram gerados no slave.
expire_logs_days:

Este parâmetro define o número de dias que os arquivos de log binário serão mantidos antes de serem automaticamente excluídos.

max_binlog_size:
Define o tamanho máximo de um arquivo de log binário. Quando o tamanho do log atinge esse limite, o MySQL cria um novo arquivo de log binário.

log_slave_updates:
Quando habilitado, este parâmetro faz com que o slave registre suas próprias atualizações no log binário. Isso é importante em configurações de replicação em cadeia (multi-nível), onde um slave pode atuar como mestre para outro slave.

# Depois, dê um restart em ambos os bancos de dados:

sudo service mysql restart

# Agora, vamos criar um usuário para a replicação:

mysql -u root -p

CREATE USER ‘replication’@’%’ IDENTIFIED BY ‘123456’;
GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’;
FLUSH PRIVILEGES;

# Vá na máquina Slave para ver se está conectando:

mysql -u replication -p -h 192.168.1.105 -P 3306

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

# Depois volte para a máquina Master:


SHOW MASTER STATUS;

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000001’| 2125| | | |
+——————+———-+————–+——————+——————-+


No Primary: Criar Backup com Ponto de Binlog
Criar um diretório de backup (por exemplo, /backup/):
mkdir /backup/

mysqldump -u root -p \
–all-databases \
–master-data=2 \
–single-transaction \
–flush-logs \
–triggers \
–routines \
–events \
> backup.sql

Transferir e Restaurar no Replica
scp backup.sql suporte@192.168.1.112:/backup
mysql -u root -p < backup.sql

# Agora no Slave rode esses comandos, e coloque as informações da Master conforme demostrado anteriormente:

STOP SLAVE;

CHANGE MASTER TO master_host=’192.168.1.105′, master_port=3306, master_user=’replication’, master_password=’123456′, master_log_file=’mysql-bin.000001′, master_log_pos=2125;

START SLAVE;

SHOW SLAVE STATUS\G

# Veja se as seguintes variáveis estão assim:

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

# Agora, vamos na máquina Master criar um banco de dados e uma tabela com conteúdo nela:

CREATE DATABASE teste;

USE teste;

CREATE TABLE carros (tipo VARCHAR(20), portas INT, automatico VARCHAR(20));

INSERT INTO carros (tipo,portas,automatico) VALUES(‘hatch’,2,’SIM’);
INSERT INTO carros (tipo,portas,automatico) VALUES(‘SUV’,4,’SIM’);
INSERT INTO carros (tipo,portas,automatico) VALUES(‘hatch’,2,’NAO’);


#Verificar no SLAVE

mysql> show tables in teste;
+—————–+
| Tables_in_teste |
+—————–+
| carros |
+—————–+
1 row in set (0.03 sec)

# Pronto!

Links de ref: https://dev.mysql.com/doc/refman/8.0/en/replication.html

Anterior Seu GPU trabalha enquanto você dorme

About author

Você pode gostar também