Pesquisa de site

Como configurar a replicação MariaDB (Master-Slave) no CentOS/RHEL 7 e Debian 8/9


Mesmo quando alguns profissionais de TI ouvem a frase “replicação de banco de dados“, muitas vezes a associam à necessidade de ter várias cópias das mesmas informações para evitar perda de dados em caso de falha de hardware ou corrupção de dados. Embora isso seja verdade até certo ponto, a replicação de banco de dados envolve muito mais do que o conceito comum de backup de um banco de dados e disponibilidade de dados.

Entre outros benefícios da replicação de banco de dados em configuração mestre-escravo podemos citar:

  1. Os backups podem ser feitos no servidor escravo sem afetar (e ser afetado por) as operações de gravação no mestre.
  2. Operações que consomem muitos recursos (como análise de dados) podem ser realizadas no escravo sem influenciar o desempenho do mestre.

Neste artigo explicaremos como configurar a replicação mestre-escravo no MariaDB 10.1. Ao contrário da replicação clássica, o MariaDB introduziu o conceito de Global Transaction IDs (GTIDs) na v10.0, que permite alterar um escravo para conecte-se e replique-se facilmente a partir de um mestre diferente. Além disso, o estado do escravo é registrado de forma segura contra falhas (as atualizações do estado são feitas na mesma transação que as atualizações dos dados).

Se você está procurando replicação do MySQL no CentOS/RHEL 6, siga este guia Configure a replicação do MySQL (Master-Slave) no CentOS/RHEL 6

Instalando MariaDB 10.1 no CentOS/RHEL 7 e Debian 8/9

Nosso ambiente de teste consiste nas seguintes máquinas (ambas CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Para instalar a versão mais recente do MariaDB, precisaremos adicionar seus repositórios aos nossos servidores. Se você estiver usando uma versão mais antiga do MariaDB, digamos 5.5, considere atualizar para a versão 10.1 mais recente usando o artigo abaixo.

  1. Atualizar MariaDB 5.5 para MariaDB 10.1

Em CentOS/RHEL

Crie um arquivo chamado MariaDB.repo dentro de /etc/yum.repos.d com o seguinte conteúdo em Master e Slave< sistemas:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Salve o arquivo e instale o MariaDB em ambos os servidores usando yum:

yum update && yum install MariaDB-server MariaDB-client

No Debian/Ubuntu

Adicione a chave para autenticar os pacotes e o repositório MariaDB:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Nota: Substitua o nome e o nome do código da distribuição na linha destacada acima.

Instale usando o comando apt-get:

apt-get update
apt-get install mariadb-server

Depois de instalar o MariaDB, execute o procedimento mysql_secure_installation no mestre e no escravo, vamos configurar um banco de dados de teste de amostra na máquina mestre.

Configurando um banco de dados MySQL de exemplo no Master

Agora configuraremos no servidor mestre o banco de dados de Employees de https://github.com/datacharmer/test_db (que fornece um conjunto de dados de 4 milhões de registros espalhados por seis tabelas) em duas etapas simples:

Clone o repositório e use-o para importar o banco de dados de amostra para sua instalação do MariaDB:

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Configurando o servidor MySQL no Master

Para configurar o mestre, siga estas etapas:

PASSO 1: Edite o arquivo /etc/my.cnf. Na seção [mysqld], adicione as quatro linhas a seguir:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

e reinicie o MariaDB:

systemctl restart mariadb

PASSO 2: Faça login no servidor MariaDB como root, crie o usuário escravo e atribua as concessões necessárias:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

O comando last (SHOW MASTER STATUS) retorna a posição atual no log binário (as coordenadas exatas que indicam exatamente em qual ponto o escravo deve começar a replicar:

PASSO 3: Saia do prompt do MariaDB (com exit;) e use o seguinte comando para tirar um instantâneo do banco de dados de funcionários. Ao pressionar Enter, você será solicitado a digitar a senha do root que você configurou anteriormente através de mysql_secure_installation:

mysqldump -u root -p employees > employees-dump.sql

Após a conclusão do dump, conecte-se novamente ao servidor de banco de dados para desbloquear as tabelas e então saia:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

PASSO 4: Copie o dump para o escravo:

scp employees-dump.sql [email :/root/ 

PASSO 5: Execute o procedimento mysql_upgrade para atualizar as tabelas do sistema (será solicitado que você insira a senha root do MariaDB):

mysql_upgrade -u root -p

PASSO 6: Permitir o serviço de banco de dados através do firewall:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Agora vamos configurar o escravo.

Configurando o Servidor MySQL no Slave

Para configurar o escravo, siga estes passos:

PASSO 1: Crie a conta para executar as tarefas de replicação. Conecte-se ao servidor MariaDB local com:

mysql -u root –p

e digite a senha que você configurou anteriormente.

PASSO 2: Uma vez conectado ao servidor de banco de dados, crie o usuário e um banco de dados vazio e conceda permissões:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

PASSO 3: Saia do prompt do MariaDB e carregue o dump criado no servidor mestre:

mysql -u root -p employees < employees-dump.sql

PASSO 4: Edite o arquivo /etc/my.cnf para atribuir um ID do servidor ao escravo sob o [mysqld] seção. Observe que precisa ser um número inteiro diferente de 1, pois usamos 1 no mestre:

server_id=2
replicate-do-db=employees

Reinicie o servidor de banco de dados:

systemctl restart mariadb

PASSO 5: Execute o procedimento mysql_upgrade para atualizar as tabelas do sistema (será solicitado que você insira a senha root do MariaDB):

mysql_upgrade -u root -p

PASSO 6: Depois que o dump for importado para o escravo, faltam apenas alguns passos para começar a replicar. Faça logon no banco de dados e execute os seguintes comandos no prompt do MariaDB. Preste especial atenção às variáveis MASTER_LOG_FILE e MASTER_LOG_POS, que devem corresponder aos valores retornados por SHOW MASTER STATUS no PASSO 2 de “Configurando o mestre” acima.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

PASSO 7: Inicie o escravo e verifique seu status sem sair do prompt do MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Não que você precise disso agora, mas observe que você pode parar o escravo com:

MariaDB [(none)]> STOP SLAVE;

se o comando SHOW SLAVE STATUS\G; retornar algum erro. Use esses erros para solucionar problemas e execute START SLAVE; para testar novamente.

Teste a replicação do banco de dados MySQL/MariaDB

Vamos adicionar um registro à tabela funcionários do servidor mestre:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Em seguida verifique se esta alteração foi replicada no escravo:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Como você pode ver, a replicação está funcionando corretamente do mestre para o escravo.

Resumo

Neste artigo, explicamos como instalar a versão mais recente do MariaDB no CentOS/RHEL 7 e no Debian 8/9, e discutimos como configurar a replicação mestre-escravo com GTIDs. Para obter mais informações, consulte o Guia de replicação MariaDB e não hesite em nos contatar usando o formulário abaixo se tiver dúvidas ou comentários.