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:
- Os backups podem ser feitos no servidor escravo sem afetar (e ser afetado por) as operações de gravação no mestre.
- 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.
- 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.