Introdução
A replicação do MySQL é realizada através da reileitura das instruções SQL executadas na Origem para o Destino armazenada nos arquivos de Log. A replicação é controloada por alguns processos do Slave, é muito flexivel, é possivel interrompe-la e inicia-la novamente, provocar um atraso ou até mesmo trocar de papel entre Master e Slave.
A seguir veremos como configurar a forma mais básica de replicação no MySQL.
Arquitetura
A replicação por Log do MySQL é feita através do Slave requisitando os eventos do Master e reaplicando estes eventos no Slave, na arquitetura de replicação temos threads de replicação e arquivos de replicação.
Threads
Referencia: Replication Threads
Master
BinLog Dump Thread - Esta thread (Master) se comunica com o Slave I/O (slave), é responsável por realizar o lock para leitura do binlog e entregar os eventos solicitados pela Thread de Slave I/O do destino. Unica thread do lado da origem.
Slave
Slave I/O Thread - Esta thread requisita para o Master os eventos que sua vez os lê do arquivo de Binlog da Origem e escreve no RelayLog do destino (slave).
Slave SQL Thread - Esta thread lê os arquivos dee relay o qual irá refazer as operações da origem no destino.
Arquivos
BinLog - Estes arquivos existem do lado do Master (Origem), e arquivam todas as operações realizadas na base de dados.
Relay Files - Estes arquivos existem do lado do Slave (Destino), e são as cópias do binlog do Master, estes arquivos são criados e cópiados pelo processo Slave I/O Thread.
Master.info - Arquivo de controle do lado do Slave (Destino), onde é armazenado as configurações necessárias para o slave se conectar no master.
relay-log.info - Arquivo de controle do lado do Slave (Destino), onde é armazenado as informações referente a reconstrução do banco, é utilizado pelo SQL Thread.
Ambiente
Abaixo o ambiente o qual será implementada a replicação por binlog.Atributo | Master | Slave |
Hostname | ol7-mysql57-master1 | ol7-mysql-slave1 |
IP | 192.168.1.71 | 192.168.1.72 |
ServerID | 101 | 102 |
Log_Bin | /mysql_binlog/mysql | /mysql_binlog/mysql |
OS Version | Red Hat Linux 7.4 | Red Hat Linux 7.4 |
DB Version | MySQL 5.7 | MySQL 5.7 |
Pre-Requisito
Parametrização da Instancia
É necessário realizar a configuração dos parametros abaixo, para isto é necessário alterar o arquivo /etc/my.cnf, adicionando os valores abaixo e realizar o restar da instancia
Master
Parametro | Valor |
innodb_flush_log_at_trx_commit | 1 |
bind-address | 192.168.1.71 |
server-id | 101 |
log_bin | /mysql_binlog/mysql/ol7-mysql57-master1-bin |
sync_binlog | 1 |
Slave
Parametro | Valor |
server-id | 102 |
Criando o usuário para replicação
mysql> CREATE USER 'slave_user'@'%' IDENTIFIED BY 'MySecret123!';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
mysql> FLUSH PRIVILEGES;
Validando:
mysql> select
*
from
information_schema.user_privileges
where
grantee like "%slave%";
Sincronizando as bases
Iniciando a replicação
Master
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+--------------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------------------+----------+--------------+------------------+-------------------+
| ol7-mysql57-master1-bin.000003 | 759 | | | |
+--------------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# mysqldump -u root -p --all-databases --master-data > mysql_dump_replication_20170909.dmp
# scp mysql_dump_replication_20170909.dmp root@ol7-mysql57-slave1:/mysql_dump/replication
mysql> UNLOCK TABLES;
Slave
mysql> CHANGE MASTER TO
MASTER_HOST='ol7-mysql57-master1',
MASTER_USER='slave_user',
MASTER_PASSWORD='MySecret123!',
MASTER_LOG_FILE='ol7-mysql57-master1-bin.000003',
MASTER_LOG_POS=759;
# mysql -u root -p < /mysql_dump/replication/mysql_dump_replication_20170909.dmp
start slave;
mysql> show slave status \G;