SlideShare uma empresa Scribd logo
Replicação MySQL
<Insert Picture Here>
                                 com PHP




                                    Airton Lastori
                              airton.lastori@oracle.com



                                               dez-2011
agenda

    Replicação MySQL
     Como configurar
PHP com Replicação MySQL
agenda

   Replicação MySQL
     Como configurar
PHP com Replicação MySQL
Alguns usuários
Top websites




        fonte: alexa.com/topsites 17-ago-2011
Quem usa MySQL – Top 10 Websites
                1.Google
                2.Facebook
                3.Youtube
                4.Yahoo!
                5.Blogger.com
                6.Baidu.com
                7.Wikipedia
                8.Windows Live
                9.Twitter
                10.QQ.com
         fonte: alexa.com/topsites 17-ago-2011
Por que MySQL é muito utilizado?
      1. MySQL: projetado para a Web
      2. baixo TCO
      3. performance & escalabilidade
      4. confiabilidade & disponibilidade
      5. LAMP stack
      6. facilidade de uso & administração
      7. a melhor escolha para SaaS & cloud
      8. MySQL Cluster para serviços Web de escala
      9. MySQL Enterprise Edition da Oracle
      10. MySQL & NoSQL


http://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php
Por que MySQL é muito utilizado?
      1. MySQL: projetado para a Web
      2. baixo TCO
      3. performance & escalabilidade
      4. confiabilidade & disponibilidade
      5. LAMP stack
      6. facilidade de uso & administração
      7. a melhor escolha para SaaS & cloud
      8. MySQL Cluster para serviços Web de escala
      9. MySQL Enterprise Edition da Oracle
      10. MySQL & NoSQL


http://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php
Replicação do MySQL Server
          cenário usual
Clients




Master


                                       Slaves



             WRITES



                            READS
Requisitos de Performance

Throughput e Latência... para determinado volume de
leituras e escritas.

Read-intensive ou Write-intensive? Ambos?

Mantém os mesmos níveis quando for necessário
escalar?
Necessidade de escalar MySQL + PHP

408 Request Time out

503 Service Unavailable

1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR)
  – Too many connections
Caso de sucesso
     Wikipedia          Benefício-chave
                        • O MySQL permite economias
                         significativas com custos de
                         hardware, adicionando novos
                         servidores commodity de
                         acordo com o necessário e de
                         maneira incremental



                        Por que MySQL?
                        • Capacidade de escalar
                         conforme necessidade e de
                         maneira incremental
                        • Baixos custos e flexibilidade


           mysql.com/customers
Relays: aplicações de leitura intensiva
Master




               Clients
 Slave
Reads
Writes


                                  Master




                                                    Relay




                                           Slaves
Caso de sucesso
                        Benefícios-chave
                        • Flexibilidade para escolher o
                          hardware
                        • Implementação incremental
                        • Simplicidade e facilidade de uso



                        •   Por que MySQL?
                        • Capacidade de escalar para 5
                            bilhões de page views por mês,
                            gerando 1 escrita para cada 1,4
                            leituras
                        • Flexibilidade para crescer de
                            maneira incremental e com baixos
                            custos

           mysql.com/customers
Sharding: aplicações de escrita intensiva
Master




               Clients
 Slave
Reads
Writes


                                 Partitioning Logic

                         1   2           3            4            5


                                                                       Shards




                                                          Slaves
Requisitos de disponibilidade

Quantos “9s” de disponibilidade?

Failover automático ou manual?

Dados distribuídos e replicados:
  Replicação assíncrona , semi-síncrona ou síncrona?
  Resincronização automática?
  Redundância geográfica?
Alta disponibilidade

  Custo & Complexidade




                                   Replicação
                                                    Replication


                                                     ISPs &        On-Line    eCommerce
                                                     Corporativo   Services   Telecoms
                                                                              Militar

                           9            9
                                               ..        9            9          9
                         35 dias      4 days
                                      4 dias           8 horas       50 min     5 min
                                                                                          %
Alta disponibilidade
                                                                   Clustering &
                                                                   Redundância
                                                                     Geográfica
  Custo & Complexidade




                                                         Clustering &
                                                         Virtualização



                                            Replicação




                                                 ISPs &        On-Line    eCommerce
                                                 Corporativo   Services   Telecoms
                                                                          Militar

                           9        9
                                            ..       9            9          9
                         35 dias   4 days
                                   4 dias          8 horas       50 min     5 min
                                                                                      %
Outros usos da replicação

• Backup
    • diminuir carga servidor
    • atraso programado
• Análise
      • Datamarts
      • DW
• Integração
    • dataset completo
    • dataset parcial
Boa prática: monitoramento
MySQL Enterprise Monitor

• Auto-detecta topologia
• Agrupa e mantém Master/Slave
• Verificações do status e
  sincronização em tempo real
• Dados consolidados de todos
  servidores
• Notificação de problemas com
  sincronização
• Postura pró-ativa ao invés de
  reativa
• Aumenta disponibilidade

                                  edelivery.oracle.com
                                       trial 30 dias
Replicação MySQL: como funciona
                                      Aplicação




             1. Operação de Escrita




                     Master                            Slave

                                3. I/O Thread copia
                                mudanças do binlog
      2. Mudanças                      para relaylog
escritas no binlog                                      4. SQL Thread
                                                        aplica mudanças
                                                        do relaylog para o
                                                        MySQL


                 • Recurso nativo do MySQL
                 • Modelo assíncrono (padrão) ou semi-síncrono (5.5)
                 • Slave adiciona carga mínima ao Master
Replicação MySQL: como escalar
                     Aplicação   Load Balancer




    Writes & Reads               Reads             Reads




      Master                      Slave             Slave




                       Replicação MySQL

    • Escreva para 1 Master
    • Leia de vários Slaves, adicione mais quando necessário
    • Perfeito para aplicações de leitura intensiva
Formatos de replicação 1/2

Statement-based                        Row-based
›   comando SQL do Master é             ›   o dado do Master é aplicado no
    executado no Slave                      Slave, sem necessidade de ser
›   formato padrão                          interpretado
›   única opção MySQL 5.0 e anterior    ›   MySQL 5.1 e posterior oferece
                                            essa opção
›   [+] binlog é usualmente menor,
    principalmente quando statement     ›   [+] formato mais seguro, pois
    afeta mais de uma linha                 todos dados serão replicados
›   [-] alguns statements não podem     ›   [+] gera menos locks tanto no
    ser replicados, principalmente          Master quanto no Slave
    dependentes de functions não-       ›   [-] maior tempo de propagação,
    determinísticas                         mais dados precisam trafegar
                                        ›   [-] não permite concurrent insert
                                            no MyISAM no Slave


         dev.mysql.com/doc/refman/5.5/en/replication-formats.html
Formatos de replicação 2/2

Mixed-based – melhor dos dois mundos!

• Servidor muda dinamicamente o formato de acordo com a
  melhor situação
• Quando configurada, o formato statement-based é utilizado
  como padrão mas vai mudar para row-based baseado no
  melhor caso




     dev.mysql.com/doc/refman/5.5/en/replication-formats.html
Links
MySQL Replication Whitepaper
mysql.com/why-mysql/white-papers/mysql-wp-replication.php


MySQL Newsletter – Ed. Especial: Scaling with MySQL
mysql.com/news-and-events/newsletter/2010/2010-09sp.html


Casos de sucesso Scale-out
mysql.com/why-mysql/scaleout


MySQL 5.5 Replication Docs
dev.mysql.com/doc/refman/5.5/en/replication.html


MySQL Enterprise Edition Whitepaper
mysql.com/why-mysql/white-papers/mysql_wp_enterprise_ready.php
agenda

    Replicação MySQL
    Como configurar
PHP com Replicação MySQL
Configurar Replicação: visão geral

Cenário básico: 1 Master e 1 Slave
1. configure usuários
2. configure como Master e como Slave
3. instrua o Slave a se conectar ao Master e replicar
   o binlog

                  Master                    Slave




         binlog                               relaylog
                           replicação



     dev.mysql.com/doc/refman/5.5/en/replication-howto.html
Passo 1/3: configure usuários

Master                               Slave
1. Crie uma conta no Master para      Nenhuma ação necessária
   que a I/O Thread do Slave possa
   se conectar via TCP/IP:

   mysql> CREATE USER 'repl'@'%'
   IDENTIFIED BY 'slavepass';


2. Dê as permissões necessárias
   para conexão e gerenciamento da
   replicação:

   mysql> GRANT REPLICATION SLAVE,
   REPLICATION CLIENT ON *.* TO
   'repl'@'%';




         dev.mysql.com/doc/refman/5.5/en/replication-howto.html
Passo 2/3: configure Master e Slave

Master                                 Slave
1. Pare o mysqld e edite o arquivo      1. Pare o mysqld e edite o arquivo
   de configuração                         de configuração
2. Habilite o binlog                    2. Habilite o binlog (Opcional)
3. Especifique um server_id único       3. Especifique um server_id único
4. Reinicie o mysqld                    4. Reinicie o mysqld
                                        5. Clone os dados com MySQL
[mysqld]                                   Enterprise Backup ou mysqldump
                                            $mysqldump --single-transaction --all-databases --
log_bin=mysql-bin                           master-data=1 --host=servername1 | mysql –
                                            host=servername2
server_id=10

                                        [mysqld]
                                        server_id=15




           dev.mysql.com/doc/refman/5.5/en/replication-howto.html
Passo 3/3: instrua o Slave a replicar

Master                                 Slave
Determine a posição atual do log        Inicie a replicação:
binário:
                                        mysql> CHANGE MASTER TO
                                        MASTER_HOST='localhost',
sessão 1                                MASTER_port=3306,
mysql> FLUSH TABLES WITH READLOCK;
                                        MASTER_USER='repl',
                                        MASTER_PASSWORD='slavepass',
sessão 2                                MASTER_LOG_FILE='mysql-bin.000003',
mysql> SHOW MASTER STATUS G            MASTER_LOG_POS=n;
File: mysql-bin.000003
Position: 78                            mysql> START SLAVE;
                                        mysql> SHOW SLAVE STATUS G

                                        Prefira executar este comando ao
                                        invés de adicionar ao arquivo de
                                        configuração para permitir trocar de
                                        Master sem parar o Slave.

           dev.mysql.com/doc/refman/5.5/en/replication-howto.html
agenda

    Replicação MySQL
     Como configurar
PHP com Replicação MySQL
Ambiente de testes Windows 1/3
1.   Web server Apache HTTPd ou Glassfish ou MS-IIS ou nginx etc
2.   PHP runtime versão 5.3.6 ou superior
3.   MySQL Server 1 Master e 1 Slave, versão 5.5, BD Sakila
4.   Ferramentas MySQL Workbench, Netbeans, Notepad++ etc

Para facilitar usaremos bundles:

• XAMPP for Windows v1.7.7
       •   Apache 2.2.21
       •   MySQL 5.5.16
       •   PHP 5.3.8
       •   ...
• MySQL Installer for Windows
       • MySQL Server 5.5.18
       • MySQL Workbench 5.2.35
       • BD Sakila, Documentação, Connectors
Ambiente de testes Windows 2/3
1. XAMPP for Windows apachefriends.org/pt_br/xampp.html
    a. Baixar ZIP e descompactar na pasta C:XAMPP
    b. Modificar a porta do MySQL para rodar 2 instâncias na mesma
    máquina:
        C:xamppmysqlbinmy.ini
        mysqld]
        port= 3307
    c. (Opcional) Modificar a porta do Apache:
        C:xamppapacheconfhttpd.conf
        Listen 81
    d. C:xamppxampp_start.exe

2. MySQL Installer dev.mysql.com/downloads/installer
    a. Instalar todas opções padrão, já será inicializado como serviço
    -defaults-file="C:ProgramDataMySQLMySQL Server 5.5my.ini"


3. (Opcional) Netbeans netbeans.org
Ambiente de testes Windows 3/3
1. Verificar instalação
   a. Criar arquivo info.php em C:xamphtdocs
    <?php phpinfo(); ?>
   b. Acessar: http://localhost:81/info.php
Exemplo: conectando ao MySQL
<?php
echo "<h1>Master</h1>";
$connection_m = mysqli_connect('localhost', 'root', 'root', 'sakila', '3310');
if (!$connection_m) {
     echo 'Error: ' + mysqli_connect_error();
} else {
    $result_m = mysqli_query($connection_m, 'SELECT film_id, title, release_year FROM film ORDER
BY film_id DESC LIMIT 5');
     if (!$result_m) {
     echo 'Error: ' + mysqli_error();
     } else {
     echo "<table>n";
           while ($row = mysqli_fetch_assoc($result_m)) {
                printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>n",
                   htmlentities($row['film_id']),
                   htmlentities($row['title']),
                        htmlentities($row['release_year']));
        } //end while
        echo "</table>n";
        mysqli_free_result($result_m);
     } //end if
     mysqli_close($connection_m);
} //end if
// REPETIR PARA SLAVE
?>
Teste: quando o Master cai
1. Teste se Update propaga
   para Slave
   mysql> UPDATE `sakila`.`film` SET
   `release_year`=2008 WHERE
   `film_id`='1000';


2. Parar o servidor Master
    "C:Program FilesMySQLMySQL Server
   5.5binmysqladmin" --defaults-
   file="C:ProgramDataMySQLMySQL
   Server 5.5my.ini" shutdown -uroot –p


3. Slave contém os dados
   replicados e pode ser usado
   para failover
Drivers PHP para MySQL (extensões)

ext/mysql
• depricated: uma das primeiras PHP extensions, mantido
  para PHP 4, sem novas funcionalidades no PHP 5
• novas funcionalidades do MySQL não são suportadas
mysqli
• suporte completo às funcionalidades MySQL
• Ativamente mantido e suportado pela Oracle
PDO_mysql
• o PHP Data Objects define uma inferface leve e consistente
  para acessar vários BDs
• boa opção para aplicações simples e portáveis
PHP 5.3 e mysqlnd – Native Driver


      Infrastructure                        PHP Module (Extension) API

                                     ext/mysql         mysqli       PDO_mysql
                   PHP Streams
      PHP Memory
PHP




                                 …




                                                       mysqlnd
                                     PECL/mysqlnd_ms            …        …



                                       MySQL Server
mysqlnd Statistics




• Por volta de 150 estatisticas coletadas
• mysqli_get_client_stats(), mysqli_get_connection_stats()
PECL/mysqlnd_ms                                                               Stable
                                                                               NOV-11
PHP mysqlnd replication plugin


Automatic read/write splitting
 • can be controlled with SQL hints
 • can be replaced providing callback
 • can be disabled for MySQL Cluster use
Load Balancing
 • random (pick for every statement or once per request, latter is default)
 • round robin (iterate per statement)
 • can be replaced providing callback
 • can be controlled with SQL hint
Fail over
 • optional, automatic connect fail over

Connection pooling
 • Lazy connections (don’t open before use, default)
Transparência para aplicação
Exemplo: split e load balancing
Limitações do PECL/mysqlnd_ms
1. nem todos cenários de consistência são
   suportados (non-ACID): por exemplo, consistência
   forte onde os clientes tem sempre a mesma visão
   após um update
   http://blog.ulf-wendel.de/2011/consistency-cloud-and-the-php-mysqlnd-replication-
   plugin/


2. não suporta topologias com mais de 1 master

3. para spliting são considerados SELECT e não é
   suportado multiplos statements inline

4. native prepared statements não são suportados, a
   não ser client-side prepared statement emulation
   (como no caso do PDO_MySQL)
Links

MySQL com PHP
dev.mysql.com/usingmysql/php

Connector/PHP User Manual
dev.mysql.com/doc/refman/5.5/en/apis-php.html


Documentação PECL/mysqlnd_ms
php.net/mysqlnd_ms


Blog Ulf Wendel
blog.ulf-wendel.de/2011/112-stable-release-of-the-replication-and-load-
   balancing-plugin-for-php
Mais sobre MySQL
MySQL Treinamento e Certificação

       Treinamentos
  MySQL DBA           MySQLDeveloper               Certificações
MySQL Boot Camp        MySQL Boot Camp
  Accelerated            Accelerated

MySQL Performance     MySQL Performance
 Tuning Boot Camp      Tuning Boot Camp
    Accelerated           Accelerated

MySQL for Begginers   MySQL for Begginers

MySQL for Database     MySQL and PHP
  Administrators      Developing Dynamic
                       Web Applicationg
MySQL Performance
     Tuning           MySQL for Developers

   MySQL High          MySQL Advanced
    Availability       Stored Procedures

  MySQL Cluster
                                                                   Opcional
                                                                   Necessário
                         http://education.oracle.com
07-dez-2011


Registre-se:
 http://bit.ly/usLQoD
Sumário
O PHP é uma importante linguagem que ajudou a tornar o MySQL o
     Banco de Dados Open Source mais popular do mundo.


O recurso de replicação nativo do MySQL é fácil de configurar e pode
    ser usado para aumento de performance e disponibilidade de
                          aplicações PHP.


O driver nativo mysqlnd em conjunto com plug-in PECL/mysqlnd_ms
podem fazer load balancing e failover de maneira transparente para
                         aplicações PHP.
Obrigado!
                                       Time MySQL Brasil




marcos.trujillo@oracle.com   marcelo.t.souza@oracle.com     ana.guiselini@oracle.com   airton.lastori@oracle.com




                         @MySQLBR                         meetup.com/MySQL-BR

Mais conteúdo relacionado

PDF
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
PDF
Guia essencial para embarcar o MySQL em seu produto
PDF
Oracle Premier Support para MySQL
PDF
Arquiteturas de referência MySQL
PDF
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
PDF
MySQL é de graça?
PDF
Alta-disponibilidade com MySQL
PDF
MySQL Cluster - visão geral
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Guia essencial para embarcar o MySQL em seu produto
Oracle Premier Support para MySQL
Arquiteturas de referência MySQL
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
MySQL é de graça?
Alta-disponibilidade com MySQL
MySQL Cluster - visão geral

Mais procurados (20)

PDF
MySQL Alta Performance & Alta Disponibilidade
PDF
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
PDF
Novidades do Universo MySQL Agosto 2014
PDF
Segurança no MySQL
PDF
Alta disponibilidade no MySQL 5.7 GUOB 2016
PDF
Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
PDF
Alta disponibilidade com MySQL Enterprise
PDF
Serviços Escaláveis e de Alta Performance com MySQL e Java
PDF
MySQL Enterprise Monitor para Desenvolvedores
PDF
MySQL para Desenvolvedores de Produto
PDF
Recursos e Benefícios do MySQL
PDF
MySQL e Oracle para DBAs
PDF
Estratégias de Segurança e Gerenciamento para MySQL
PDF
Desenvolvendo serviços escaláveis e de alta performance com MySQL
PPT
My sql enterprise vs community
PDF
Apresentação MySQL Enterprise
PDF
MySQL: o banco de dados open source mais popular do mundo
PDF
Oracle Real Application Clusters
PDF
Novidades do MySQL para desenvolvedores ago15
PDF
Arquitetando sua aplicação de nova geração com MySQL 5.7
MySQL Alta Performance & Alta Disponibilidade
Novidades do Universo MySQL para PHP Web Developers - Dezembro 2014
Novidades do Universo MySQL Agosto 2014
Segurança no MySQL
Alta disponibilidade no MySQL 5.7 GUOB 2016
Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
Alta disponibilidade com MySQL Enterprise
Serviços Escaláveis e de Alta Performance com MySQL e Java
MySQL Enterprise Monitor para Desenvolvedores
MySQL para Desenvolvedores de Produto
Recursos e Benefícios do MySQL
MySQL e Oracle para DBAs
Estratégias de Segurança e Gerenciamento para MySQL
Desenvolvendo serviços escaláveis e de alta performance com MySQL
My sql enterprise vs community
Apresentação MySQL Enterprise
MySQL: o banco de dados open source mais popular do mundo
Oracle Real Application Clusters
Novidades do MySQL para desenvolvedores ago15
Arquitetando sua aplicação de nova geração com MySQL 5.7
Anúncio

Semelhante a Replicação MySQL e PHP (20)

PDF
MySQL - o banco de dados open source mais popular do mundo
PDF
MySQL June/2009 FDTI - Portuguese Version
PDF
Bancos de Dados na AWS
PPTX
Uso estratégico do MySQL para empresas de TI: Novidades e Futuro
PPTX
17h30 aws-databases-summit
PDF
MySQL + Java - Manuel Contreras
PDF
MySQL no Windows: implementação eficiente de novas aplicações
PDF
MySQL e Oracle para Desenvolvedores
PDF
MySQL e Oracle para Desenvolvedores
PDF
Replicação e alta disponibilidade by wagner bianchi -
PDF
MySQL do ISAM ao NoSQL
PPT
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
PDF
MySQL Cluster - visão geral
PDF
Vantagens e desvantagens de uma arquitetura microservices
PPTX
DevTalk 08/2019
PDF
Java Escalável e com Alta Disponibilidade na Nuvem
PDF
Arquiteturas Cloud: Uma Introdução
PDF
Lean Startup e Computação em Nuvem
PDF
Rails nas Nuvens
PDF
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
MySQL - o banco de dados open source mais popular do mundo
MySQL June/2009 FDTI - Portuguese Version
Bancos de Dados na AWS
Uso estratégico do MySQL para empresas de TI: Novidades e Futuro
17h30 aws-databases-summit
MySQL + Java - Manuel Contreras
MySQL no Windows: implementação eficiente de novas aplicações
MySQL e Oracle para Desenvolvedores
MySQL e Oracle para Desenvolvedores
Replicação e alta disponibilidade by wagner bianchi -
MySQL do ISAM ao NoSQL
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
MySQL Cluster - visão geral
Vantagens e desvantagens de uma arquitetura microservices
DevTalk 08/2019
Java Escalável e com Alta Disponibilidade na Nuvem
Arquiteturas Cloud: Uma Introdução
Lean Startup e Computação em Nuvem
Rails nas Nuvens
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
Anúncio

Mais de MySQL Brasil (17)

PDF
MySQL como Document Store PHP Conference 2017
PDF
MySQL no Paypal Tesla e Uber
PDF
MySQL 8.0.1 DMR
PDF
MySQL Roadmap NoSQL HA Fev17
PDF
5 razões estratégicas para usar MySQL
PDF
MySQL 5.7 como Document Store
PDF
Enabling digital transformation with MySQL
PDF
Alta Disponibilidade no MySQL 5.7
PDF
NoSQL no MySQL 5.7
PDF
OpenStack & MySQL
PDF
10 Razões para Usar MySQL em Startups
PDF
Novidades do Universo MySQL julho-15
PDF
MySQL The State of the Dolphin - jun15
PDF
Aumentando a segurança, disponibilidade e desempenho com MySQL Enterprise Edi...
PDF
MySQL Enterprise Edition Portfolio
PDF
Architecture and Design MySQL powered applications by Peter Zaitsev Meetup Sa...
PDF
Novidades do Universo MySQL Maio 2014
MySQL como Document Store PHP Conference 2017
MySQL no Paypal Tesla e Uber
MySQL 8.0.1 DMR
MySQL Roadmap NoSQL HA Fev17
5 razões estratégicas para usar MySQL
MySQL 5.7 como Document Store
Enabling digital transformation with MySQL
Alta Disponibilidade no MySQL 5.7
NoSQL no MySQL 5.7
OpenStack & MySQL
10 Razões para Usar MySQL em Startups
Novidades do Universo MySQL julho-15
MySQL The State of the Dolphin - jun15
Aumentando a segurança, disponibilidade e desempenho com MySQL Enterprise Edi...
MySQL Enterprise Edition Portfolio
Architecture and Design MySQL powered applications by Peter Zaitsev Meetup Sa...
Novidades do Universo MySQL Maio 2014

Último (19)

PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Processos na gestão de transportes, TM100 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula 18 - Manipulacao De Arquivos python
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Apple Pippin Uma breve introdução. - David Glotz
COBITxITIL-Entenda as diferença em uso governança TI
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Custos e liquidação no SAP Transportation Management, TM130 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula04-Academia Heri- Tecnologia Geral 2025
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx

Replicação MySQL e PHP

  • 1. Replicação MySQL <Insert Picture Here> com PHP Airton Lastori airton.lastori@oracle.com dez-2011
  • 2. agenda Replicação MySQL Como configurar PHP com Replicação MySQL
  • 3. agenda Replicação MySQL Como configurar PHP com Replicação MySQL
  • 5. Top websites fonte: alexa.com/topsites 17-ago-2011
  • 6. Quem usa MySQL – Top 10 Websites 1.Google 2.Facebook 3.Youtube 4.Yahoo! 5.Blogger.com 6.Baidu.com 7.Wikipedia 8.Windows Live 9.Twitter 10.QQ.com fonte: alexa.com/topsites 17-ago-2011
  • 7. Por que MySQL é muito utilizado? 1. MySQL: projetado para a Web 2. baixo TCO 3. performance & escalabilidade 4. confiabilidade & disponibilidade 5. LAMP stack 6. facilidade de uso & administração 7. a melhor escolha para SaaS & cloud 8. MySQL Cluster para serviços Web de escala 9. MySQL Enterprise Edition da Oracle 10. MySQL & NoSQL http://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php
  • 8. Por que MySQL é muito utilizado? 1. MySQL: projetado para a Web 2. baixo TCO 3. performance & escalabilidade 4. confiabilidade & disponibilidade 5. LAMP stack 6. facilidade de uso & administração 7. a melhor escolha para SaaS & cloud 8. MySQL Cluster para serviços Web de escala 9. MySQL Enterprise Edition da Oracle 10. MySQL & NoSQL http://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php
  • 9. Replicação do MySQL Server cenário usual Clients Master Slaves WRITES READS
  • 10. Requisitos de Performance Throughput e Latência... para determinado volume de leituras e escritas. Read-intensive ou Write-intensive? Ambos? Mantém os mesmos níveis quando for necessário escalar?
  • 11. Necessidade de escalar MySQL + PHP 408 Request Time out 503 Service Unavailable 1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR) – Too many connections
  • 12. Caso de sucesso Wikipedia Benefício-chave • O MySQL permite economias significativas com custos de hardware, adicionando novos servidores commodity de acordo com o necessário e de maneira incremental Por que MySQL? • Capacidade de escalar conforme necessidade e de maneira incremental • Baixos custos e flexibilidade mysql.com/customers
  • 13. Relays: aplicações de leitura intensiva Master Clients Slave Reads Writes Master Relay Slaves
  • 14. Caso de sucesso Benefícios-chave • Flexibilidade para escolher o hardware • Implementação incremental • Simplicidade e facilidade de uso • Por que MySQL? • Capacidade de escalar para 5 bilhões de page views por mês, gerando 1 escrita para cada 1,4 leituras • Flexibilidade para crescer de maneira incremental e com baixos custos mysql.com/customers
  • 15. Sharding: aplicações de escrita intensiva Master Clients Slave Reads Writes Partitioning Logic 1 2 3 4 5 Shards Slaves
  • 16. Requisitos de disponibilidade Quantos “9s” de disponibilidade? Failover automático ou manual? Dados distribuídos e replicados: Replicação assíncrona , semi-síncrona ou síncrona? Resincronização automática? Redundância geográfica?
  • 17. Alta disponibilidade Custo & Complexidade Replicação Replication ISPs & On-Line eCommerce Corporativo Services Telecoms Militar 9 9 .. 9 9 9 35 dias 4 days 4 dias 8 horas 50 min 5 min %
  • 18. Alta disponibilidade Clustering & Redundância Geográfica Custo & Complexidade Clustering & Virtualização Replicação ISPs & On-Line eCommerce Corporativo Services Telecoms Militar 9 9 .. 9 9 9 35 dias 4 days 4 dias 8 horas 50 min 5 min %
  • 19. Outros usos da replicação • Backup • diminuir carga servidor • atraso programado • Análise • Datamarts • DW • Integração • dataset completo • dataset parcial
  • 20. Boa prática: monitoramento MySQL Enterprise Monitor • Auto-detecta topologia • Agrupa e mantém Master/Slave • Verificações do status e sincronização em tempo real • Dados consolidados de todos servidores • Notificação de problemas com sincronização • Postura pró-ativa ao invés de reativa • Aumenta disponibilidade edelivery.oracle.com trial 30 dias
  • 21. Replicação MySQL: como funciona Aplicação 1. Operação de Escrita Master Slave 3. I/O Thread copia mudanças do binlog 2. Mudanças para relaylog escritas no binlog 4. SQL Thread aplica mudanças do relaylog para o MySQL • Recurso nativo do MySQL • Modelo assíncrono (padrão) ou semi-síncrono (5.5) • Slave adiciona carga mínima ao Master
  • 22. Replicação MySQL: como escalar Aplicação Load Balancer Writes & Reads Reads Reads Master Slave Slave Replicação MySQL • Escreva para 1 Master • Leia de vários Slaves, adicione mais quando necessário • Perfeito para aplicações de leitura intensiva
  • 23. Formatos de replicação 1/2 Statement-based Row-based › comando SQL do Master é › o dado do Master é aplicado no executado no Slave Slave, sem necessidade de ser › formato padrão interpretado › única opção MySQL 5.0 e anterior › MySQL 5.1 e posterior oferece essa opção › [+] binlog é usualmente menor, principalmente quando statement › [+] formato mais seguro, pois afeta mais de uma linha todos dados serão replicados › [-] alguns statements não podem › [+] gera menos locks tanto no ser replicados, principalmente Master quanto no Slave dependentes de functions não- › [-] maior tempo de propagação, determinísticas mais dados precisam trafegar › [-] não permite concurrent insert no MyISAM no Slave dev.mysql.com/doc/refman/5.5/en/replication-formats.html
  • 24. Formatos de replicação 2/2 Mixed-based – melhor dos dois mundos! • Servidor muda dinamicamente o formato de acordo com a melhor situação • Quando configurada, o formato statement-based é utilizado como padrão mas vai mudar para row-based baseado no melhor caso dev.mysql.com/doc/refman/5.5/en/replication-formats.html
  • 25. Links MySQL Replication Whitepaper mysql.com/why-mysql/white-papers/mysql-wp-replication.php MySQL Newsletter – Ed. Especial: Scaling with MySQL mysql.com/news-and-events/newsletter/2010/2010-09sp.html Casos de sucesso Scale-out mysql.com/why-mysql/scaleout MySQL 5.5 Replication Docs dev.mysql.com/doc/refman/5.5/en/replication.html MySQL Enterprise Edition Whitepaper mysql.com/why-mysql/white-papers/mysql_wp_enterprise_ready.php
  • 26. agenda Replicação MySQL Como configurar PHP com Replicação MySQL
  • 27. Configurar Replicação: visão geral Cenário básico: 1 Master e 1 Slave 1. configure usuários 2. configure como Master e como Slave 3. instrua o Slave a se conectar ao Master e replicar o binlog Master Slave binlog relaylog replicação dev.mysql.com/doc/refman/5.5/en/replication-howto.html
  • 28. Passo 1/3: configure usuários Master Slave 1. Crie uma conta no Master para Nenhuma ação necessária que a I/O Thread do Slave possa se conectar via TCP/IP: mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass'; 2. Dê as permissões necessárias para conexão e gerenciamento da replicação: mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%'; dev.mysql.com/doc/refman/5.5/en/replication-howto.html
  • 29. Passo 2/3: configure Master e Slave Master Slave 1. Pare o mysqld e edite o arquivo 1. Pare o mysqld e edite o arquivo de configuração de configuração 2. Habilite o binlog 2. Habilite o binlog (Opcional) 3. Especifique um server_id único 3. Especifique um server_id único 4. Reinicie o mysqld 4. Reinicie o mysqld 5. Clone os dados com MySQL [mysqld] Enterprise Backup ou mysqldump $mysqldump --single-transaction --all-databases -- log_bin=mysql-bin master-data=1 --host=servername1 | mysql – host=servername2 server_id=10 [mysqld] server_id=15 dev.mysql.com/doc/refman/5.5/en/replication-howto.html
  • 30. Passo 3/3: instrua o Slave a replicar Master Slave Determine a posição atual do log Inicie a replicação: binário: mysql> CHANGE MASTER TO MASTER_HOST='localhost', sessão 1 MASTER_port=3306, mysql> FLUSH TABLES WITH READLOCK; MASTER_USER='repl', MASTER_PASSWORD='slavepass', sessão 2 MASTER_LOG_FILE='mysql-bin.000003', mysql> SHOW MASTER STATUS G MASTER_LOG_POS=n; File: mysql-bin.000003 Position: 78 mysql> START SLAVE; mysql> SHOW SLAVE STATUS G Prefira executar este comando ao invés de adicionar ao arquivo de configuração para permitir trocar de Master sem parar o Slave. dev.mysql.com/doc/refman/5.5/en/replication-howto.html
  • 31. agenda Replicação MySQL Como configurar PHP com Replicação MySQL
  • 32. Ambiente de testes Windows 1/3 1. Web server Apache HTTPd ou Glassfish ou MS-IIS ou nginx etc 2. PHP runtime versão 5.3.6 ou superior 3. MySQL Server 1 Master e 1 Slave, versão 5.5, BD Sakila 4. Ferramentas MySQL Workbench, Netbeans, Notepad++ etc Para facilitar usaremos bundles: • XAMPP for Windows v1.7.7 • Apache 2.2.21 • MySQL 5.5.16 • PHP 5.3.8 • ... • MySQL Installer for Windows • MySQL Server 5.5.18 • MySQL Workbench 5.2.35 • BD Sakila, Documentação, Connectors
  • 33. Ambiente de testes Windows 2/3 1. XAMPP for Windows apachefriends.org/pt_br/xampp.html a. Baixar ZIP e descompactar na pasta C:XAMPP b. Modificar a porta do MySQL para rodar 2 instâncias na mesma máquina: C:xamppmysqlbinmy.ini mysqld] port= 3307 c. (Opcional) Modificar a porta do Apache: C:xamppapacheconfhttpd.conf Listen 81 d. C:xamppxampp_start.exe 2. MySQL Installer dev.mysql.com/downloads/installer a. Instalar todas opções padrão, já será inicializado como serviço -defaults-file="C:ProgramDataMySQLMySQL Server 5.5my.ini" 3. (Opcional) Netbeans netbeans.org
  • 34. Ambiente de testes Windows 3/3 1. Verificar instalação a. Criar arquivo info.php em C:xamphtdocs <?php phpinfo(); ?> b. Acessar: http://localhost:81/info.php
  • 35. Exemplo: conectando ao MySQL <?php echo "<h1>Master</h1>"; $connection_m = mysqli_connect('localhost', 'root', 'root', 'sakila', '3310'); if (!$connection_m) { echo 'Error: ' + mysqli_connect_error(); } else { $result_m = mysqli_query($connection_m, 'SELECT film_id, title, release_year FROM film ORDER BY film_id DESC LIMIT 5'); if (!$result_m) { echo 'Error: ' + mysqli_error(); } else { echo "<table>n"; while ($row = mysqli_fetch_assoc($result_m)) { printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>n", htmlentities($row['film_id']), htmlentities($row['title']), htmlentities($row['release_year'])); } //end while echo "</table>n"; mysqli_free_result($result_m); } //end if mysqli_close($connection_m); } //end if // REPETIR PARA SLAVE ?>
  • 36. Teste: quando o Master cai 1. Teste se Update propaga para Slave mysql> UPDATE `sakila`.`film` SET `release_year`=2008 WHERE `film_id`='1000'; 2. Parar o servidor Master "C:Program FilesMySQLMySQL Server 5.5binmysqladmin" --defaults- file="C:ProgramDataMySQLMySQL Server 5.5my.ini" shutdown -uroot –p 3. Slave contém os dados replicados e pode ser usado para failover
  • 37. Drivers PHP para MySQL (extensões) ext/mysql • depricated: uma das primeiras PHP extensions, mantido para PHP 4, sem novas funcionalidades no PHP 5 • novas funcionalidades do MySQL não são suportadas mysqli • suporte completo às funcionalidades MySQL • Ativamente mantido e suportado pela Oracle PDO_mysql • o PHP Data Objects define uma inferface leve e consistente para acessar vários BDs • boa opção para aplicações simples e portáveis
  • 38. PHP 5.3 e mysqlnd – Native Driver Infrastructure PHP Module (Extension) API ext/mysql mysqli PDO_mysql PHP Streams PHP Memory PHP … mysqlnd PECL/mysqlnd_ms … … MySQL Server
  • 39. mysqlnd Statistics • Por volta de 150 estatisticas coletadas • mysqli_get_client_stats(), mysqli_get_connection_stats()
  • 40. PECL/mysqlnd_ms Stable NOV-11 PHP mysqlnd replication plugin Automatic read/write splitting • can be controlled with SQL hints • can be replaced providing callback • can be disabled for MySQL Cluster use Load Balancing • random (pick for every statement or once per request, latter is default) • round robin (iterate per statement) • can be replaced providing callback • can be controlled with SQL hint Fail over • optional, automatic connect fail over Connection pooling • Lazy connections (don’t open before use, default)
  • 42. Exemplo: split e load balancing
  • 43. Limitações do PECL/mysqlnd_ms 1. nem todos cenários de consistência são suportados (non-ACID): por exemplo, consistência forte onde os clientes tem sempre a mesma visão após um update http://blog.ulf-wendel.de/2011/consistency-cloud-and-the-php-mysqlnd-replication- plugin/ 2. não suporta topologias com mais de 1 master 3. para spliting são considerados SELECT e não é suportado multiplos statements inline 4. native prepared statements não são suportados, a não ser client-side prepared statement emulation (como no caso do PDO_MySQL)
  • 44. Links MySQL com PHP dev.mysql.com/usingmysql/php Connector/PHP User Manual dev.mysql.com/doc/refman/5.5/en/apis-php.html Documentação PECL/mysqlnd_ms php.net/mysqlnd_ms Blog Ulf Wendel blog.ulf-wendel.de/2011/112-stable-release-of-the-replication-and-load- balancing-plugin-for-php
  • 46. MySQL Treinamento e Certificação Treinamentos MySQL DBA MySQLDeveloper Certificações MySQL Boot Camp MySQL Boot Camp Accelerated Accelerated MySQL Performance MySQL Performance Tuning Boot Camp Tuning Boot Camp Accelerated Accelerated MySQL for Begginers MySQL for Begginers MySQL for Database MySQL and PHP Administrators Developing Dynamic Web Applicationg MySQL Performance Tuning MySQL for Developers MySQL High MySQL Advanced Availability Stored Procedures MySQL Cluster Opcional Necessário http://education.oracle.com
  • 48. Sumário O PHP é uma importante linguagem que ajudou a tornar o MySQL o Banco de Dados Open Source mais popular do mundo. O recurso de replicação nativo do MySQL é fácil de configurar e pode ser usado para aumento de performance e disponibilidade de aplicações PHP. O driver nativo mysqlnd em conjunto com plug-in PECL/mysqlnd_ms podem fazer load balancing e failover de maneira transparente para aplicações PHP.
  • 49. Obrigado! Time MySQL Brasil marcos.trujillo@oracle.com marcelo.t.souza@oracle.com ana.guiselini@oracle.com airton.lastori@oracle.com @MySQLBR meetup.com/MySQL-BR