unifal - mysql 5.6 - replicação

Post on 05-Jul-2015

331 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

REPLICAÇÃO DE DADOS

Wagner Bianchi Certified MySQL 5.0 Developer

Certified MySQL 5.0 Database Administrator Certified MySQL 5.1 Cluster Database Administrator

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!!!)

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;

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;

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;

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 root@192.168.0.101:/root!

MASTER: 192.168.0.100 <= SLAVE: 192.168.0.101!

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

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’;

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 […]!!

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;!

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!

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

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;!

!

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)!

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!

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)!

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)!

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;

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’;!

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

top related