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
About author
Você pode gostar também
Descubra as vantagens e diferenciais do Banco de Dados NoSQL e MongoDB
NoSQL refere-se a um banco de dados não relacional. Um banco de dados relacional é um formato de banco de dados rigidamente estruturado, baseado em tabelas, como o MySQL ou o Oracle. Os bancos
Criando um Container do Docker (Sem o Docker!)
Aprenda na prática como o Docker gerencia seus containers. O intuito deste post é mostrar, na prática como o Docker gerencia seus containers. E qual jeito seria melhor de demonstrar o
Atualização do Curso WildFly: Administração com Cluster de Alta Performance em ambiente DevOps da 4Linux
O mundo das aplicações corporativas em Java está em constante evolução — e a administração do servidor WildFly também precisa acompanhar esse ritmo! Pensando nisso, a 4Linux atualizou o curso







