Criar instância Slave usando o Percona Xtrabackup – Artigo cientifico

Ola caro amigo leitor,

Em 2017 finalizei um artigo cientifico da Especialização de Banco de dados, e desenvolvi uma rotina que cria uma instância MySQL Slave utilizando o Percona Xtra Backup.

O ambiente foi desenhado utilizando o Vagrant, e toda a rotina esta disponível no Git Hub. Para brincar com este ambiente, basta fazer o download do projeto para o seu Desktop:

Acessando o diretório do projeto “new_slave_automatic”, será exibido dos diretórios, master e slave. Para provisionar os servidores, é necessário acessar cada um destes diretórios e digitar o comando:

Os servidores são provisionados com os seguintes endereços ip:

Uma vez que os dois ambientes estão no ar, você pode acessa-los em cada diretório através do comando vagrant ssh, ou via ssh com o usuário vagrant, exemplo:

O servidor master é provisionado com uma versão do CentOS 6, com o Percona MySQL Server 5.6. Por ser um ambiente de teste, ao provisionar o servidor, a senha do usuário root do sistema é alterada para ‘teste1234’, e deixo o serviço de iptables parado.

O servidor slave segue a mesma lógica, porém instalo o Percona MySQL Server 5.6 e em seguida mantenho apenas a estrutura de diretórios do MySQL, para que a rotina movimente os novos arquivos após efetuar o backup.

A rotina é composta por dois scripts: prepare-connect.sh e o create_slave.sh, ambos estão disponíveis no diretório /new_slave_automatic/scripts do servidor slave.

O prepare-connect.sh é o que configura toda a comunicação entre o servidor Slave -> Master, instalando os pacotes do Percona xtrabackup e pigz no Master, e criando uma chave ssh entre os dois servidores, para que a conexão nos próximos passos não solicite a senha.

Neste ambiente, para a execução do prepare-connect.sh é necessário informar o ip do servidor master, e quando solicitado, a senha do usuário root do servidor Master, que foi definida como ‘teste1234’.

O segundo script é o que põe a mão na massa, efetua o backup do instância Master via streaming para o servidor slave, descompacta o backup, copia os arquivos de backup para o datadir, sobe o serviço do MySQL e configura a replicação. Cada passo tem uma validação, onde caso ocorra um erro, é retornada a mensagem informando o ponto de falha.

Para a executar este script, é necessário informar o IP do servidor master, junto ao usuário e senha do MySQL do servidor master com permissão de Super, ou Administrador. Neste ambiente, ao provisionar o servidor master, é criado um usuário root no mysql aberto para conexão de qualquer host, com a senha ‘root’.

Este script já cria um usuário no MySQL Master para gerenciar a replicação. Caso todos os passos sejam executados com sucesso, no final do script esta senha é informada, onde o nome do usuário é sempre ‘slave’.

Bem esta foi uma das primeiras aventuras em bash script, e imagino que muitos ajustes devem ser feitos para que o script esteja no estado da arte. Porém hoje ele já consegue entregar o que eu queria, que é a criação de uma replicação no MySQL com o mínimo de interrupções possíveis no MySQL Master.

Espero ajudar a comunidade com esta rotina, já que surgem diversas duvidas referente a criação de uma replicação ou da execução da ferramenta percona xtrabackup, para a criação de um hot backup. Por se tratar de um ambiente de testes, qualquer alteração é valida e viável para a adequação a um ambiente especifico, já que este script foi feito considerando a instalação de um MySQL padrão do repositório.

Dicas, criticas ou elogios são bem vindos nos comentários.
Obrigado e até a próxima.

Jose Wilson

Deixe uma resposta