Banco de Dados · 8 min read · Jan 29, 2026
Replicando um banco de dados mestre usando MariaDB 10 no Debian 8
Replicar bancos de dados cria redundância que pode proteger contra perda de dados e permitir desempenho otimizado para aplicações. Este tutorial abordará o básico da replicação de um banco de dados mestre MariaDB 10.0 existente para um ou mais escravos. Nos exemplos a seguir, o sistema operacional host é o Debian 8.
Estas instruções podem ser aplicadas a outros sistemas operacionais, mas esteja ciente de que vários comandos e locais de arquivos padrão serão diferentes. Especificamente, você deve substituir os caminhos de /etc/mysql/my.cnf, /var/lib/mysql, o nome e caminho padrão do seu arquivo de log binário, e os comandos para iniciar, parar e reiniciar o mysqld de acordo com as especificidades do seu sistema.
1. Verifique a conectividade
Antes de prosseguir, certifique-se de que o mestre e o escravo podem se comunicar na rede e que cada um tem uma entrada para o outro em seus respectivos arquivos /etc/hosts. Cada host deve ser capaz de pingar o outro, e você deve ser capaz de ssh de um para o outro como um usuário normal.
2. Ativar log binário do mysqld no mestre
No host mestre, verifique se o log binário está ativado. Invocar mysqld com os parâmetros –verbose –help exibirá os valores de operação para o daemon MariaDB. Como root:
mysqld --verbose --help | grep log-bin...
log-bin (Sem valor padrão)
...O valor da entrada log-bin define a convenção de nomenclatura dos arquivos de log binário. No Debian, esses arquivos residem em /var/lib. Se o valor de log-bin for (Sem valor padrão), você precisará ativar o log modificando o arquivo de configuração my.cnf. No Debian, my.cnf reside no diretório /etc/mysql.
Abra /etc/mysql/my.cnf em um editor de texto e localize o grupo [mysqld]. Se não existir, crie-o e insira uma linha que simplesmente leia log-bin.
[mysqld]
log-binIncluir esta entrada ativará o log binário quando o mysqld for reiniciado.
Você pode optar por definir um valor para log-bin, por exemplo, log-bin= filename, para definir um nome personalizado para o arquivo de log binário. Neste tutorial, não definiremos um valor, e os nomes de arquivos de log padrão serão usados.
Reinicie o mysqld:
service mysql restartVerifique se a alteração teve efeito:
mysqld --verbose --help | grep log-bin...
log-bin mysqld-bin
...Como mostrado aqui, o nome do arquivo de log binário padrão no Debian começa com mysqld-bin, por exemplo, mysqld-bin. nnnnnn.
3. Conceder direitos a um usuário de replicação
É uma boa prática ter todas as tarefas de replicação realizadas por um usuário de replicação dedicado. Nestes exemplos, nomearemos o usuário de repluser e definiremos a senha desse usuário como a string replpass.
Conceda a este usuário os privilégios globais SUPER, RELOAD e REPLICATION SLAVE. Isso permitirá que o usuário de replicação execute comandos de superusuário, limpe caches de banco de dados e busque atualizações do servidor mestre.
Entre no cliente MariaDB como root do banco de dados:
mysql -u root -pNo prompt do MariaDB, insira o comando:
GRANT SUPER, RELOAD, REPLICATION SLAVE ON *.* TO 'repluser'@'%' IDENTIFIED BY 'replpass';Aqui, o caractere curinga do nome do host ‘%‘ permite que o usuário de replicação se conecte de qualquer host.
Verifique se os direitos foram concedidos:
SHOW GRANTS FOR 'repluser'\G;4. Limpar caches de banco de dados e definir tabelas como somente leitura
Em preparação para fazer um snapshot dos bancos de dados, limpe todas as tabelas e defina-as como READ LOCK. Isso deve ser feito rapidamente, durante horários de menor movimento ou um período de manutenção do sistema.
No mestre:
FLUSH TABLES WITH READ LOCK;Agora que as tabelas estão bloqueadas, verifique o status do mestre:
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 | 995 | | |
+-------------------+----------+--------------+------------------+Suas informações serão diferentes, mas anote os valores de File e Position. Você usará essas informações na etapa 7.
Saia do cliente MariaDB:
\q5. Snapshot dos bancos de dados para o host escravo
Crie um arquivo do banco de dados ou bancos de dados que existem no mestre que você deseja replicar. Cada um desses bancos de dados tem seu próprio diretório em /var/lib/mysql. Neste exemplo, iremos tar um único banco de dados, localizado no caminho /var/lib/mysql/dbname.
Este comando arquiva um único banco de dados. Se você estiver arquivando bancos de dados adicionais, anexe seus caminhos completos ao comando, por exemplo, /var/lib/mysql/dbname1 /var/lib/mysql/dbname2…
tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbnameAgora, como usuário normal username, transfira este arquivo para uma conta de usuário normal no host escravo:
rsync -avP mysql-master.tar.bz2 [username]@slavehost:~/.ou, usando scp:
scp mysql-master.tar.bz2 [username]@slavehost:~/.Em seguida, SSH para o host escravo:
ssh [username]@slavehostComo root, pare o mysqld no escravo:
service mysql stop…e extraia o arquivo:
tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.6. Configurar IDs do servidor para mestre e escravo
Modifique /etc/mysql/my.cnf no mestre, adicionando a entrada server-id= n no grupo [mysqld], onde n é um inteiro único identificando o servidor. Comumente, n =1 para o servidor mestre, mas n pode ser qualquer inteiro único no intervalo [ 1, 2^32-1 ]. Definiremos nosso mestre como server-id=1, e nosso escravo como server-id=100.
(Se my.cnf não existir no escravo, crie-o. Se existir, procure uma entrada existente de server-id e descomente/edite essa linha).
Em /etc/mysql/my.cnf no host mestre:
[mysqld]
server-id=1Em /etc/mysql/my.cnf no host escravo:
[mysqld]
server-id=1007. Desbloquear tabelas e iniciar/reiniciar mysqld no mestre e escravo
No servidor mestre, no cliente MariaDB como root do banco de dados, desbloqueie as tabelas:
mysql -u root -pUNLOCK TABLES;\qReinicie o mysqld no mestre:
service mysql restartE inicie-o no escravo:
service mysql startVocê pode verificar se o novo valor de server-id teve efeito em cada host. Como root:
mysqld --verbose --help | grep server-id8. Configurar identidade do mestre no escravo
No escravo, configure a identidade do servidor mestre. Entre no cliente MariaDB:
mysql -u root -pExecute o seguinte comando, substituindo os valores de MASTER_LOG_FILE e MASTER_LOG_POS pelo log binário File e Position que você registrou na etapa 4, e os valores de MASTER_HOST, MASTER_USER e MASTER_PASSWORD pelos seus próprios valores.
CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=995;9. Ativar escravo
No escravo, no cliente MariaDB como root do banco de dados:
START SLAVE;Agora você pode verificar o status do escravo:
SHOW SLAVE STATUS \G;************************* 1. row *************************
Slave_IO_State: Waiting for master to send event
Master_Host: masterhost
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000009
Read_Master_Log_Pos: 1330
Relay_Log_File: mysqld-relay-bin.000008
Relay_Log_Pos: 1618
Relay_Master_Log_File: mysqld-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1330
Relay_Log_Space: 2204
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:Se houver erros nos processos de replicação, você os verá listados aqui.
10. Fazer alterações no mestre e verificar replicação no escravo
Você pode verificar se a replicação está ocorrendo criando um novo banco de dados no mestre e vendo as alterações no escravo.
mysql -u root -pCrie um novo banco de dados:
CREATE DATABASE repltest;USE repltestCrie uma tabela e insira um valor:
CREATE TABLE test (hello VARCHAR(10));INSERT INTO test VALUES ('world');\qAgora entre no cliente MariaDB no escravo:
mysql -u root -pUSE repltestSELECT * FROM test;+-------+
| hello |
+-------+
| world |
+-------+
1 row in set (0.00 sec)11. Repetir processo para escravos adicionais
Você pode repetir esse processo para cada escravo adicional. Especificamente, execute estas etapas:
11 ( a) . No mestre, no cliente MariaDB como root do banco de dados, limpe e bloqueie tabelas:
FLUSH TABLES WITH READ LOCK;Após o bloqueio, mostre o status do mestre:
**SHOW MASTER STATUS;Anote os valores de File e Position.
11 ( b) . No mestre, como root:
tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname11 ( c) . No mestre, como usuário normal:
rsync -avP mysql-master.tar.bz2 [username]@slavehost2:~/.11 ( d) . No escravo, como root:
service mysql stoptar xjvf /home/[username]/mysql-master.tar.bz2 -C /.11 ( e) . Em /etc/mysql/my.cnf no host escravo, adicione ou edite a linha server-id= no grupo [mysqld], onde o valor de server-id é novo e único:
[mysqld]
server-id=20011 ( f) . No mestre, no cliente MariaDB como root do banco de dados, desbloqueie as tabelas:
UNLOCK TABLES;11 ( g) . No mestre, como root, reinicie o mysqld:
service mysql restart11 ( h) . No escravo, como root, inicie o mysqld:
**service mysql start
11 ( i) . No escravo, no cliente MariaDB como root do banco de dados, configure a identidade do mestre e o nome do arquivo de log binário e a posição da etapa 10(a):
CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.nnnnnn’, MASTER_LOG_POS=n;11 ( j) . No escravo, no cliente MariaDB como root do banco de dados, ative a replicação:
START SLAVE;12. Solução de problemas: Escravo incapaz de se conectar ao mestre
Verifique /var/mysql/my.cnf no mestre para uma entrada bind-address. Se bind-address estiver definido como 127.0.0.1, o servidor aceitará apenas conexões do localhost. Comente esta linha ou defina o valor como * para permitir conexões de todos os endereços IPv4 e IPv6. Se você modificar my.cnf, não se esqueça de reiniciar o mysqld.
Se as conexões ainda não estiverem funcionando, certifique-se de que seu servidor está permitindo conexões na porta 3306. No mestre, liste as tabelas do firewall do kernel:
iptables -LVocê pode criar uma permissão para conexões na porta 3306 com o seguinte comando, substituindo o nome do dispositivo da interface de rede por eth0 conforme necessário:
iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPTReceba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.