unifal - mysql 5.6 - replicação

20
REPLICAÇÃO DE DADOS Wagner Bianchi Certified MySQL 5.0 Developer Certified MySQL 5.0 Database Administrator Certified MySQL 5.1 Cluster Database Administrator

Upload: wagner-bianchi

Post on 05-Jul-2015

331 views

Category:

Technology


4 download

DESCRIPTION

Material utilizado em Workshop para a turma de Ciência da Computação da Universidade Federal de Alfenas.

TRANSCRIPT

Page 1: UNIFAL - MySQL 5.6 - Replicação

REPLICAÇÃO DE DADOS

Wagner Bianchi Certified MySQL 5.0 Developer

Certified MySQL 5.0 Database Administrator Certified MySQL 5.1 Cluster Database Administrator

Page 2: UNIFAL - MySQL 5.6 - Replicação

Para iniciarmos... !   Nesta parte vamos falar de replicação de dados MySQL; !   Não vamos falar de backup, replicação é diferente; !   Atualmente, há três modelo de replicação no MySQL:

–  Replicação Clássica, assíncrona; –  Replicação Clássica, semisíncrona; –  Replicação GTID, assíncrona;

!   MySQL e replicação síncrona somente com MySQL Cluster; !   MySQL e replicação com base em certificados, Galera Cluster; !   O nosso foco aqui:

–  Replicação Clássica e GTID (novidade do MySQL 5.6!!!)

Page 3: UNIFAL - MySQL 5.6 - Replicação

Como funciona a replicação? !   Características principais do serviço:

–  Servidores MASTER e servidores SLAVE; –  Um MASTER pode ter vários SLAVE; –  Um SLAVE pode ter somente um MASTER;

Page 4: UNIFAL - MySQL 5.6 - Replicação

Ainda mais características... !   No MASTER, o SLAVE possui um usuário que é utilizado

para conexão e leitura dos logs binários; !   O SLAVE possui duas threads utilizadas para:

–  IO_THREAD: conexão direta com o MASTER para ler os logs binários e trazer tudo que foi alterado no MASTER e depositar em logs denominados relay log;

–  SQL_THREAD: lê o relay log e executa os comandos que alteraram os dados dos bancos de dados no MASTER;

!   Com essa sequência de execuções, o servidor ou, os servidores SLAVE conseguem se manter em sincronia com o MASTER;

Page 5: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação clássica !   Tarefas básicas antes do setup:

–  Qual dos servidores será o MASTER e qual será o SLAVE? –  Configurar os Ips das máquinas como fixo/estático; –  Criar um usuário para replicação no MASTER; –  Fazer um backup no MASTER; –  Transferir o backup para o SLAVE; –  Fazer o restore do backup no SLAVE; –  Configurar a variável server_id com valores únicos; –  Obter as coordenadas do log binário do MASTER; –  Configurar a replicação no SLAVE;

Page 6: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação clássica

!   Criando um usuário para replicação no MASTER:

!   Fazendo o backup completo do MASTER:

!   Transferindo o arquivo de backup para o SLAVE:

mysql> grant replication slave on *.* to rpl@'%' identified by '123456';!

# mysql -u root -p -e "flush tables with read lock;”!# mysqldump -u root -p --all-databases > mybackup.dmp !# mysql -u root -p -e "unlock tables;”!

# scp mybackup.dmp [email protected]:/root!

MASTER: 192.168.0.100 <= SLAVE: 192.168.0.101!

Page 7: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação clássica !   Fazendo o restore do backup no MySQL SLAVE:

!   Habilitando o log binário e configurando o server_id:

!   Reinicie o MySQL MASTER e SLAVE:

# mysql -u root -p < mybackup.dmp

#: master!# vim /etc/my.cnf![mysqld]!server_id = 1!log_bin=mysql01-bin!!#: slave![mysqld]!server_id = 2!

[ root@mysql01 ~]# service mysqld restart![ root@mysql02 ~]# service mysqld restart

Page 8: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação clássica !   Obtendo no MASTER as coordenadas de replicação:

!   Configuramos o SLAVE como READ_ONLY:

!   Configurando a replicação no servidor SLAVE com o comando CHANGE MASTER TO:

!   Iniciando a replicação, no SLAVE:

mysql> set global read_only=1;!

mysql> change master to master_host=‘192.168.0.100’, ! master_log_pos=120,master_log_file=‘mysql01-bin.000001’;

mysql> show master status\G

mysql> start slave user=‘rpl’ password=‘123456’;

Page 9: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação clássica !   Verifique o status da replicação com SHOW SLAVE STATUS: # mysql –u root –p –e “show slave status\G”! Slave_IO_State: Waiting for master to send event!  Slave_IO_Running: Yes! Slave_SQL_Running: Yes! Seconds_Behind_Master: 0!Master_SSL_Verify_Server_Cert: No! Last_IO_Errno: 0! Last_IO_Error:! Last_SQL_Errno: 0! Last_SQL_Error:! Master_Server_Id: 1! Master_UUID: f8a2570c-3237-11e4-8fa9-0800274fb806! Master_Info_File: /var/lib/mysql/master.info! SQL_Delay: 0! SQL_Remaining_Delay: NULL! Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it! Master_Retry_Count: 86400 […]!!

Page 10: UNIFAL - MySQL 5.6 - Replicação

Testando a replicação clássica !   No servidor MASTER, criamos um banco de dados com o

nome `meudb`:

!   No servidor SLAVE verificamos se os dados foram replicados:

!   Se o banco de dados criado no MASTER é exibido na lista de bancos de dados do comando SHOW DATABASES, a replicação foi configurada com sucesso!

mysql> create database meudb;!

mysql> show databases;!

Page 11: UNIFAL - MySQL 5.6 - Replicação

Replicação GTID !   Novo modelo de replicação disponível no MySQL 5.6 ++; !   GTID significa Global Transaction Identifier; !   Cada servidor em uma topologia GTID tem um UUID; !   Cada transação executada receba um ID;

3E11FA47-71CA-11E1-9E33-C80AA9429562:23!

@@server_uuid!

trx_id!

MASTER: 192.168.0.100 <= SLAVE: 192.168.0.101!

Page 12: UNIFAL - MySQL 5.6 - Replicação

Replicação GTID !   O log binário é gravado de forma diferente;

Replicação GTID: Não necessita indicar posição do log; Fácil recuperação em caso de falha; Fácil visualização em caso de lagging; Fácil configuração, AUTO_POSTION

Page 13: UNIFAL - MySQL 5.6 - Replicação

Replicação GTID !   Variáveis de ambiente mandatórias em todos os servidores

de bancos de dados MySQL envolvidos na replicação:

[mysqld]!gtid_mode=on # habilita o tipo de replicação!log_bin=name-bin # habilita o log binário!log_slave_updates # sem replicação em loop!enforce_gtid_consistency # força consistência (safe mode)!!–  enforce_gtid_consistency executará somente consultas que

possam ser executadas em modo seguro e que possam ser envolvidas em meio à transações. Instruções problemáticas: !•  CREATE TABLE ... SELECT;!•  CREATE TENPORARY TABLE em transações;!

!

Page 14: UNIFAL - MySQL 5.6 - Replicação

Replicação GTID !   Consultando o valor atual das variáveis requeridas para o

funcionamento da replicação GTID:

mysql> select @@server_id,! -> @@gtid_mode as gtid,! -> @@log_bin as binlog,! -> @@log_slave_updates as logslaveupdates,! -> @@enforce_gtid_consistency safe_trxs;!+-------------+------+--------+-----------------+-----------+!| @@server_id | gtid | binlog | logslaveupdates | safe_trxs |!+-------------+------+--------+-----------------+-----------+!| 1 | OFF | 0 | 0 | 0 |!+-------------+------+--------+-----------------+-----------+!1 row in set (0.00 sec)!

Page 15: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação GTID !   Edite o arquivo de configuração do MySQL (my.cnf) nos

servidores MASTER e SLAVE e inclua as variáveis mandatórias abaixo da seção [mysqld]:

!   Fazemos o restart após a edição do arquivo de configuração:

[mysqld]!server_id=1 # configure 1 master, 2 slave!gtid_mode=on # habilita o tipo de replicação!log_bin=name-bin # habilita o log binário!log_slave_updates # sem replicação em loop!enforce_gtid_consistency=true # força consistência (safe mode)!

# service mysqld restart!

Page 16: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação GTID !   Certificamos se as variáveis configuradas foram realmente

reconfiguradas a partir do arquivo de configuração: #: servidor master!mysql> select @@server_id, ! @@gtid_mode as gtid, ! @@log_bin as binlog, ! @@log_slave_updates as logslaveupdates, ! @@enforce_gtid_consistency safe_trxs;!+-------------+------+--------+-----------------+-----------+!| @@server_id | gtid | binlog | logslaveupdates | safe_trxs |!+-------------+------+--------+-----------------+-----------+!| 1 | ON | 1 | 1 | 1 |!+-------------+------+--------+-----------------+-----------+!1 row in set (0.00 sec)!

Page 17: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação GTID !   Certificamos se as variáveis configuradas foram realmente

reconfiguradas a partir do arquivo de configuração: #: servidor slave!mysql> select @@server_id, ! @@gtid_mode as gtid, ! @@log_bin as binlog, ! @@log_slave_updates as logslaveupdates, ! @@enforce_gtid_consistency safe_trxs;!+-------------+------+--------+-----------------+-----------+!| @@server_id | gtid | binlog | logslaveupdates | safe_trxs |!+-------------+------+--------+-----------------+-----------+!| 2 | ON | 1 | 1 | 1 |!+-------------+------+--------+-----------------+-----------+!1 row in set (0.00 sec)!

Page 18: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação GTID !   Depois de confirmarmos as configurações, no SLAVE,

precisamos parar e dar um reset na replicação clássica:

!   Como já temos um usuário para replicação no MASTER, basta enviarmos o comando CHANGE MASTER TO:

mysql> stop slave; -- para as duas threads de replicação!Query OK, 0 rows affected (0.05 sec)!!mysql> reset slave; -- reinicia as configurações de replicação!Query OK, 0 rows affected (0.38 sec)!

mysql> change master to master_host=‘192.168.0.100’, ! master_auto_position=1;

Page 19: UNIFAL - MySQL 5.6 - Replicação

Setup: replicação GTID !   Damos um start na replicação GTID:

!   Verificamos o status da replicação: mysql> show slave status\G!Slave_IO_State: Waiting for master to send event! Master_Host: 192.168.0.101! Master_User: rpl! Master_Port: 3306! Connect_Retry: 60! Master_Log_File: mysql02-bin.000004! Read_Master_Log_Pos: 407! Relay_Log_File: mysqld-relay-bin.000002! Relay_Log_Pos: 621! Relay_Master_Log_File: mysql02-bin.000004! Slave_IO_Running: Yes! Slave_SQL_Running: Yes! Retrieved_Gtid_Set: b80666fd-32da-11e4-93ce-0800274fb806:1-2! Executed_Gtid_Set: b80666fd-32da-11e4-93ce-0800274fb806:1-2! Auto_Position: 1!

mysql> start slave user=‘rpl’ password=‘123456’;!

Page 20: UNIFAL - MySQL 5.6 - Replicação

Yes!!!! We’re done & happy now!!!