Menu fechado

Replicação em MySQL – Master – Slave

Para explicar a replicação, iremos utilizar o artigo Instalando MySQL 5.5 Parte 2 – Múltiplas instâncias pois iremos precisar de 2 instâncias rodando no nosso servidor.

Iremos ativar os logs binários do nosso servidor, criando um arquivo my_rep.cnf com o seguinte conteúdo:

[mysqld_multi]
mysqld = /mysql/mysql/bin/mysqld_safe
mysqladmin = /mysql/mysql/bin/mysqladmin
[mysqld1]
port = 3306
datadir = /mysql/3306/data
socket = /mysql/3306/mysql.sock
log-error = /mysql/3306/logs/mysqld.log
pid-file = /mysql/3306/mysqld.pid
server_id = 1
#LOGS
log-bin = /mysql/3306/logs/server1_bin.log
log-bin-index = /mysql/3306/logs/server1_log-bin.index
expire_logs_days = 7
binlog-format = MIXED
[mysqld2]
port = 3307
datadir = /mysql/3307/data
socket = /mysql/3307/mysql.sock
log-error = /mysql/3307/logs/mysqld.log
pid-file = /mysql/3307/mysqld.pid
server_id = 2
#LOGS
relay-log = /mysql/3307/logs/server2.relay_log
relay-log-index = /mysql/3307/logs/server2.relay_log_index
expire_logs_days = 7

Feito isso vamos iniciar o serviço conforme o artigo:

cd /mysql/mysql
mysqld_multi --defaults-file=/mysql/my_rep.cnf start

Agora vamos conectar no servidor 3306 e criar um usuário chamado ‘replicacao’ com senha ‘replicacao’ com direito a replicação para que ele possa se conectar ao servidor:

mysql -u usuario -p -h 127.0.0.1
mysql> GRANT REPLICATION SLAVE ON *.* TO replicacao@127.0.0.1 IDENTIFIED BY 'replicacao';
mysql> FLUSH PRIVILEGES;

Devemos então conectar no servidor slave nesse casso o 3307 e dar o start na replicação:

mysql -u usuario -p -h 127.0.0.1 --port 3307
mysql> CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_USER = 'replicacao', MASTER_PASSWORD = 'replicacao', MASTER_PORT = 3306, MASTER_LOG_FILE = 'server1_bin.000001', MASTER_LOG_POS = 0;
mysql> START SLAVE;

Vamos explicar o comando

CHANGE MASTER TO

como o próprio nome diz, ele “seta o master para” :

MASTER_USER = usuário que irá acessar o servidor master
MASTER_PASSWORD = senha do usuário que irá acessar o servidor master
MASTER_PORT = a porta do mysql no servidor master
MASTER_LOG_FILE = nome do arquivo de log binário (setamos isso como server1_bin.log no .cnf e podemos observar que ele cria arquivos com índice numérico que cresce a cada vez que o servidor é iniciado ou chega ao limite estipulado na configuração max_binlog_size que por padrão é 1GB
MASTER_LOG_POS = a posição que o slave irá começar a buscar dentro do binlog

E como monitoramos a replicação??? Simples com o comando

SHOW SLAVE STATUS;

A replicação trabalha com 2 threads:

Slave_IO = É a thread responsável por pegar os comandos sql executados no master e salvar no disco do slave
Slave_SQL = É a thread responsável por executar os comandos sql que foram buscados na thread Slave_IO

Vou explicar 5 status importantes do comando

SHOW SLAVE STATUS;

Slave_IO_Running = Nos diz se a thread de IO está rodando temos que encontrar o status Yes nessa linha
Slave_SQL_Running = Nos diz se a thread de SQL está rodando temos que encontrar o status Yes nessa linha
Seconds_Behind_Master = Nos diz se o nosso slave está atrazado em relação ao master, nesta linha temos que encontrar o numero 0(Zero) para que o slave esteja atualizado em relação ao master
Last_IO_Error = Caso exista algum erro com a thread de IO nesta linha ele irá informar o que está acontecendo
Last_SQL_Error = Caso exista algum erro com a thread de SQL nesta linha ele irá informar o que está acontecendo

E pronto, temos um servidor MASTER replicando seus dados em um SLAVE, todos os dados criador / editados / deletados no servidor 3306 serão replicados no servidor 3307.

Mais detalhes sobre replicação em MySQL podem ser encontrados na documentação

Gostou ? Ajude e Compartilhe!