O servidor slave precisa se conectar ao master para ler o binary log. Por segurança, é uma boa prática criar uma conta de usuário dedicada para esse fim, com privilégios limitados. Nesta etapa, você criará um usuário de replicação e populará o banco de dados de teste para observar a replicação em ação.
-
Conectar ao Servidor Master:
Abra um shell MySQL dentro do contêiner mysql-master.
docker exec -it mysql-master mysql -uroot -plab_password
-
Criar um Usuário de Replicação:
No prompt mysql>, execute o seguinte comando para criar um usuário chamado repl_user com a senha repl_password. Este usuário será usado pelo slave para se conectar. Usamos '@'%' para permitir que o usuário se conecte de qualquer host, o que inclui nosso contêiner slave na rede Docker.
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
-
Conceder Privilégios de Replicação:
O novo usuário precisa do privilégio REPLICATION SLAVE, que permite que ele leia os binary logs do master.
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
Após conceder os privilégios, recarregue as tabelas de concessão para aplicar as alterações imediatamente.
FLUSH PRIVILEGES;
-
Verificar o Status do Binary Log do Master:
Antes de configurar o slave, você precisa saber as coordenadas exatas no binary log do master onde o slave deve começar a replicar. O comando SHOW MASTER STATUS fornece essa informação.
SHOW MASTER STATUS;
A saída será semelhante a esta. Anote os valores de File e Position, pois você precisará deles na próxima etapa.
+------------------+----------+------------------+--------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+------------------+--------------------+-------------------+
| mysql-bin.000001 | 337 | replication_db | | |
+------------------+----------+------------------+--------------------+-------------------+
1 row in set (0.00 sec)
-
Criar uma Tabela de Teste e Dados:
O banco de dados replication_db foi criado quando o contêiner iniciou. Vamos criar uma tabela e inserir alguns dados para testar a replicação.
USE replication_db;
CREATE TABLE messages (
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(255)
);
INSERT INTO messages (content) VALUES ('Hello from the master!');
Você pode verificar se os dados foram inseridos corretamente.
SELECT * FROM messages;
Você deverá ver a linha que acabou de inserir.
+----+------------------------+
| id | content |
+----+------------------------+
| 1 | Hello from the master! |
+----+------------------------+
1 row in set (0.00 sec)
Agora, saia do shell MySQL.
exit;
Você preparou o servidor master criando um usuário de replicação e alguns dados de teste.