Replicação de Servidor MYSQL de Maneira Simples (Contingência)
Prezados Colegas,
Primeiramente saudações pinguianas.
Vivemos tempos poucos movimentados no tocante a questão de tecnologia open-source por conta do período eleitoral. Toda a atenção da área e também de seus profissionais, estão nesse momento voltada à observação do comportamento do software responsável por esse pleito, que ocorrerá em poucos dias.
Mesmo diante de toda polarização que envolve essa manifestação democrática, os trabalhos dos profissionais de TI não param. As necessidades de pesquisar e prover soluções para as demandas diárias das empresas que fazemos parte não acabam nunca.
Diante disso, aqui na empresa para qual trabalho, depois de nos recuperamos de um “desastre” da perda de um servidor MySQL em produção (Sim! Nós temos backups sempre atualizados), chegamos a conclusão que mesmo não perdendo nenhum dado (graças ao bendito backup), o tempo que nossos sistemas ficaram “fora do ar” causaram diversos transtornos aos nossos clientes e usuários.
Então veio a necessidade de efetuar uma espécie de “replicação em tempo real” do servidor de banco de dados.
Depois de um dia de pesquisas, análises de materiais incompletos e inacabados, resolvemos então nos organizar, criar um ambiente de testes, efetuar a implementação e documentar os procedimentos. Então, de bom grado e boa fé, para ajudar outros analistas com as mesmas necessidades ou necessidades semelhantes, vou escrever um breve artigo com base no conteúdo que documentamos.
Montaremos o seguinte cenário:
mysq-master.empresa.intra.net —–> 172.16.0.1
mysql-slave.empresa.intra.net ——-> 172.16.0.2
Ambos servidores possuem a distribuição Linux CentOS Release 7.5.1804 (Core), com repositório EPEL devidamente configurado, todo atualizado e MySQL server 5.6.41.
Então, primeiramente, no servidor mysql-master.empresa.intra.net (que já está em produção), vamos habilitar o log binário. Para isso, vamos efetuar os procedimentos abaixo:
Primeiro, precisamos editar o arquivo “/etc/my.cnf”.
vim /etc/my.cnf
Abaixo da linha que inicia com “sql_mode”, insira o seguinte conteúdo:
log-bin = mysql-bin server-id = 1
Agora, precisamos reiniciar o MySQL Server:
systemctl restart mysqld
Agora, vamos acessar o mysql:
mysql -u root -p's3nh@'
Agora, você deve rodar o comando abaixo:
mysql> SHOW MASTER STATUS;
A saída deve ser algo parecido com isso aqui:
Depois disso, vamos começar a preparar o servidor mysql-slave.empresa.intra.net:
Primeiro, precisamos editar o arquivo “/etc/my.cnf”.
vim /etc/my.cnf
Abaixo da linha que inicia com “sql_mode”, insira o seguinte conteúdo:
log-bin = mysql-bin server-id = 2 relay-log = mysql-relay-bin log-slave-updates = 1
Agora, precisamos reiniciar o MySQL Server:
systemctl restart mysqld
Feito isso, agora precisamos criar o usuário que fará a replicação. ATENÇÃO, POIS ISSO DEVE SER FEITO NOS DOIS SERVIDORES. Acesse o mysql e faça o comando abaixo (nos dois servidores):
mysql> create user replicador identified by 'r3pl1c@'; mysql> grant replication slave, replication client on *.* to replicador@'%' identified by 'r3pl1c@';
Agora, precisamos tirar um backup do mysql master e restaurar no slave. Então, no servidor master. Eu SUGIRO que você faça um bloqueio temporário do servidor master (exceto quando o acesso vir do servidor slave), para evitar a gravação de dados durante a cópia. Então, faça o seguinte comando:
iptables -I INPUT -p tcp --dport 3306 -j REJECT ! -s 172.16.0.2
Agora, vamos ao backup:
mysqldump --force --opt --single-transaction --events --routines --triggers --master-data=1 --all-databases > backup.sql
Depois do backup finalizado, copie o arquivo para o servidor slave:
scp backup.sql [email protected]:/root/
Depois que a cópia terminar, precisamos injetar os dados no MySQL server do servidor Slave. Acesse-o e faça o seguinte comando:
mysql -u root -p's3nh@' < backup.sql
Agora, acesse o MySQL server do servidor slave e rode o seguinte comando:
mysql> FLUSH PRIVILEGES;
Feito isso, no servidor slave, rodaremos o seguinte comando (olhem o nome do log de acordo com a saída do primeiro comando no servidor Master):
mysql> CHANGE MASTER TO MASTER_HOST='172.16.0.1', MASTER_USER='replicador', MASTER_PASSWORD='r3pl1c@', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=556723;
Agora, vamos ativar o slave. Rode o comando abaixo:
mysql> START SLAVE;
Agora, vamos verificar o status da replicação com o comando abaixo:
mysql> SHOW SLAVE STATUS\G;
Se tudo tiver ok, você verá uma tela parecida com essa:
Agora, acesse o servidor master e destrave o acesso ao MySQL. Faça o seguinte comando no servidor master:
iptables -D INPUT -p tcp --dport 3306 -j REJECT ! -s 172.16.0.2
Se tudo correu bem, o servidor já está replicado. Tudo que você fizer no servidor master será automaticamente replicado para o slave.
Isso é tudo!
Esse artigo foi útil? Colabore com o nosso site para podermos continuar dando mais dicas como essa!
Formas de doação:
- Boleto / Cartão de crédito: https//bit.ly/AprendendoLinux
- Pix: [email protected]
- PicPay: @henrique_fagundes
- PayPal: [email protected]
- Bitcoin: bc1qtnn5z058htzy799dslwrpjcdpm0vuta3vrj28l
Favorecido: Luiz Henrique Marques Fagundes
Quando o master reinicia ele muda o arquivo de log, para outro ID, e a replicação para de funcionar ?