Pular para o conteúdo

Replicação MySQL em 5 minutos: Ambiente e pré-requisitos

Replicação MySQL em 5 minutos

Ambiente e pré-requisitos

MqosJS 4VOz9rl0WSj6oo9rjBVfwzChPELRpiUAKyZavqNmk5Nmywgl8tyRDL0Yt 2Z3ol0Aa6VVOaX1RSgFseOUJnmf52NPxN39nAXj5ma0kNXBr cVy5wJ

Para este teste simples, vamos usar o Linux e configurar a replicação no MySQL 5.6 entre 2 instâncias: uma master e outra slave. Serão criadas 2 instâncias MySQL partir do zero, ou seja, sem dados. Elas estarão na mesma máquina, mas respondendo em portas diferentes: 3310 e 3311.

O único pré-requisito é ter o MySQL 5.6 instalado.

  • Se já tiver o MySQL 5.6 instalado, basta usar o caminho onde está o bin/mysqld como basedir nos passos abaixo. Por exemplo, no Oracle Linux 7 ou RHEL 7 o binário fica em /usr/sbin/mysqld, portanto basedir=/usr;
  • Caso ainda não tenha os binários do MySQL 5.6, basta baixar o arquivo TAR e descompactar em algum diretório conveniente que será seu basedir, como por exemplo /opt/mysql/mysql-5.6:
# mkdir /opt/mysql
# cd /opt/mysql
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
# tar xvzf mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
# rm mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz
# mv mysql-5.6.23-linux-glibc2.5-x86_64 mysql-5.6

Observações: neste caso considere para os passos abaixo basedir=/opt/mysql/mysql-5.6; tente trabalhar sempre com as versões mais recentes – substitua 5.6.23 nos comandos acima caso outra mais atual esteja disponível em http://dev.mysql.com/downloads/mysql .

Para um tutorial completo de como criar uma VM com MySQL para testes, veja https://www.profissionaloracle.com.br/gpo/artigo/banco-de-dados/mysql/494-tutorial-ambiente-de-testes-com-mysql-enterprise-virtualbox-e-oracle-linux .

Replicação Simples

1) Crie uma instância para ser o Master:

# mkdir /opt/mysql/master /opt/mysql/master/data /opt/mysql/master/tmp
# cd /opt/mysql/master
# nano master.cnf

[client] port=3310 socket=/opt/mysql/master/tmp/my-master.sock 

[mysql] prompt=master>\_
[mysqld] server-id=10 port=3310 basedir=/usr datadir=/opt/mysql/master/data socket=/opt/mysql/master/tmp/my-master.sock log-bin=master-bin.log innodb_flush_log_at_trx_commit=1 sync_binlog=1 
# chown mysql:mysql *
# /usr/bin/mysql_install_db --defaults-file=/opt/mysql/master/master.cnf --user=mysql

2) Inicie e teste a nova instância:

# /usr/bin/mysqld_safe --defaults-file=/opt/mysql/master/master.cnf &
# mysql --defaults-file=/opt/mysql/master/master.cnf -uroot -p

master> SHOW VARIABLES LIKE 'port';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3310  |
+---------------+-------+

Observação: quando necessário, para parar o processo mysqld faça um shutdown limpo:

# mysqladmin --defaults-file=/opt/mysql/master/master.cnf -uroot –p shutdown

3) Abra outro terminal e crie outra instância para ser o Slave:

# mkdir /opt/mysql/slave /opt/mysql/slave/data /opt/mysql/slave/tmp
# cd /opt/mysql/slave
# nano slave.cnf

[client] port=3311 socket=/opt/mysql/slave/tmp/my-slave.sock 
[mysql] prompt=slave>\_ 
[mysqld] server-id=11 port=3311 basedir=/usr datadir=/opt/mysql/slave/data socket=/opt/mysql/slave/tmp/my-slave.sock log-bin=slave-bin.log innodb_flush_log_at_trx_commit=1 sync_binlog=1 
# chown mysql:mysql *
# /usr/bin/mysql_install_db --defaults-file=/opt/mysql/slave/slave.cnf --user=mysql

5) Inicie e teste a nova instância:

# /usr/bin/mysqld_safe --defaults-file=/opt/mysql/slave/slave.cnf &
# mysql --defaults-file=/opt/mysql/slave/slave.cnf -uroot -p

slave> SHOW VARIABLES LIKE 'port';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3311  |
+---------------+-------+

6) Agora que temos duas instâncias com server-id’s diferentes e log-bin habilitado, crie um usuáriona instância master para que a slave consiga conectar-se a ela:

master> CREATE USER repl_user@12pontos27.0.0.1;
master> GRANT REPLICATION SLAVE ON *.* TO repl_user@127.0.0.1 IDENTIFIED BY 'repl_user_password';

Observação: em uma instalação real a instância slave provavelmente estará em outro host – substitua 127.0.0.1 pelo IP do host onde está sua instância slave.

7) Antes de iniciar a replicação, verifique o status no master:

master> SHOW MASTER STATUS G

*************************** 1. row ***************************

File: master-bin.000003
Position: 433

8) Use os dados do status acima e inicie a replicação no slave:

slave> CHANGE MASTER TO 
    MASTER_HOST='127.0.0.1', 
    MASTER_PORT=3310, 
    MASTER_USER='repl_user',
    MASTER_PASSWORD='repl_user_password',
    MASTER_LOG_FILE='master-bin.000003',
    MASTER_LOG_POS=433;

slave> START SLAVE;

9) Teste básico:

master> CREATE DATABASE teste_repl;
master> CREATE TABLE teste_repl.simples (id INT NOT NULL PRIMARY KEY);
master> INSERT INTO teste_repl.simples VALUES (999),(1),(20),(5);
slave> SELECT * FROM teste_repl.simples;

Conclusão

Como vimos, é muito simples fazer funcionar a replicação no MySQL. Mais adiante veremos opções mais avançadas para tornar a replicação mais resiliente a erros (crash-safe) e implementar failover automático.

Referências

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 5 / 5. Contagem de votos: 15

Sem votos ! Seja o primeiro a classificar !

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress