Este documento explica os fundamentos, componentes e aplicações da replicação MySQL, incluindo como configurar um ambiente de replicação master-slave, monitorá-lo e usá-lo para aumentar a disponibilidade e escalabilidade de bancos de dados.
Replicação MySQL Fundamentos,Funcionamento, Monitoração e Aplicação na Prática HTI Consultoria e Tecnologia Alexandre M de Almeida www.hti.com.br [email_address]
2.
O que éreplicação? Replicação => Duplicação Não é uma exclusividade de BD Criar e manter uma “ réplica ” de uma base inteira de bases ou tabelas específicas
Master Operações deescrita ou escrita/leitura Um master pode ter vários slaves
6.
Slave Exclusivamente paraleitura Um slave pode ter somente um master Hardware depende da aplicação do slave É o slave que determina o master
7.
Binary Log 1/2Registro de toda alteração no banco Somente “UPDATES” => DDL/DML Registro ordenado => Offset Back UP incremental Recuperação RTO/RPO Aumento de I/O disco Sensível redução de performance Lado do Master*
8.
Binary Log 2/2… # at 263 #111026 17:28:54 server id 100 end_log_pos 366 Query thread_id=7 exec_time=0 error_code=0 SET TIMESTAMP=1319635734/*!*/; create database vamos_replicar /*!*/; # at 366 #111026 17:29:36 server id 100 end_log_pos 526 Query thread_id=7 exec_time=0 error_code=0 use vamos_replicar/*!*/; SET TIMESTAMP=1319635776/*!*/; create table belezinha (id int not null auto_increment primary key, texto varchar(100)) /*!*/; # at 526 #111026 17:29:54 server id 100 end_log_pos 604 Query thread_id=7 exec_time=0 error_code=0 SET TIMESTAMP=1319635794/*!*/; BEGIN /*!*/; # at 604 #111026 17:29:54 server id 100 end_log_pos 632 Intvar SET INSERT_ID=1/*!*/; # at 632 #111026 17:29:54 server id 100 end_log_pos 760 Query thread_id=7 exec_time=0 error_code=0 SET TIMESTAMP=1319635794/*!*/; insert into belezinha values (null,'primeiro registro') /*!*/; # at 760 #111026 17:29:54 server id 100 end_log_pos 787 Xid = 515 COMMIT/*!*/;
Montando uma Replicação1/5 (servidor Master) Ligar Binary Log & Id do servidor Editando o arquivo de configuração (my.cnf) [mysqld] … log-bin server-id = 100 Baixar & Subir o servidor (mysqld) Criar usuário para o(s) slave(s) mysql> GRANT REPLICATION SLAVE ON *.* TO chupacabras@’10.1.1.%’ IDENTIFIED BY ‘senha123’;
Montando uma Replicação3/5 (servidor slave) Ajuste o id do servidor, editando o my.cnf [mysqld] faça coisa certa mysqld e não mysql … server-id=200 Baixar & Subir servidor (mysql) Restaurar a backup no slave shell> mysql -uuser –p < minhabkp.sql
18.
Montando uma Replicação4/5 (servidor slave) Pegue a posição e arquivo da replicação shell> head –n25 minhabkp.sql … -- -- Position to start replication or point-in-time recovery from -- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000001', MASTER_LOG_POS=263; Diga ao slave quem dá as cartas shell> CHANGE MASTER TO MASTER_HOST = '10.1.1.11', MASTER_PORT = 3306, MASTER_USER = 'chupacabras', MASTER_PASSWORD = 'senha123', MASTER_LOG_FILE = 'mysqld-bin.000001', MASTER_LOG_POS = 263, MASTER_CONNECT_RETRY=10;
19.
Montando uma Replicação5/5 (servidor slave) E deixe a mágica começar mysql> START SLAVE; Verifique se está tudo funcionando mysql> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes Slave_SQL_Running: Yes … Seconds_Behind_Master: 0 …
20.
Monitorando Replicação 1/4 MySQL Monitoring Dashboard (MES) MONyog OpManager MaatKit Modo Escorpião
Já imaginou comousar? Back up on line Back up on line off-line Escalabilidade Alta disponibilidade Distribuição Geográfica Usuários malas e seus relatórios Manutenção, etc