Replicação do MySQL

1️⃣ Para começar, vamos criar o Docker compose que inicia dois containers: um como mestre e outro como réplica (slave).

name: replicacao

services:
  db-master:
    image: mysql:8.1
    container_name: mysql-master
    command: --server-id=1 --log-bin=myqsl-bin --binglog-format=row
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: replicador
      MYSQL_PASSWORD: replicador
    ports:
      - "3306:3306"
  db-slave:
    image: mysql:8.1
    container_name: mysql-slave
    command: --server-id=2 --log-bin=myqsl-bin --binglog-format=row
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: replicador
      MYSQL_PASSWORD: replicador
    ports:
      - "3305:3305"
docker-compose up -d

Configurar o mestre

docker exec -it mysql-principal bash
mysql -uroot -p
ALTER USER 'replicador'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replicador';
GRANT REPLICATION SLAVE ON *.* TO 'replicador'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;

Aqui, precisamos acompanhar o status de saída:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      838 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Ajustando a réplica

docker exec -it mysql-replica bash
mysql -uroot -p
CHANGE MASTER TO
  MASTER_HOST='mysql-principal',
  MASTER_USER='replicador',
  MASTER_PASSWORD='replicador',
  MASTER_LOG_FILE='mysql-bin.000003',
  MASTER_LOG_POS=838;
START SLAVE;
SHOW SLAVE STATUS\G