Replicação MySQL e PHP

8,606 views
8,432 views

Published on

O recurso de Replicação MySQL tem sido utilizado com sucesso para aumento de performance e disponibilidade por diversas aplicações web no mundo todo, tais como Wikipedia, Twitter e Facebook. Vamos entender como configurar a Replicação MySQL e conectar uma pequena aplicação PHP com o objetivo de compreender os mecanismos que tornam possíveis atender requisitos de alta-performance e alta-disponibilidade.

Neste tutorial configuraremos o recurso de Replicação nativa do MySQL e construiremos uma pequena aplicação PHP que atende requisitos de alta-performance e alta-disponibilidade.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,606
On SlideShare
0
From Embeds
0
Number of Embeds
2,625
Actions
Shares
0
Downloads
119
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Replicação MySQL e PHP

  1. 1. Replicação MySQL<Insert Picture Here> com PHP Airton Lastori airton.lastori@oracle.com dez-2011
  2. 2. agenda Replicação MySQL Como configurarPHP com Replicação MySQL
  3. 3. agenda Replicação MySQL Como configurarPHP com Replicação MySQL
  4. 4. Alguns usuários
  5. 5. Top websites fonte: alexa.com/topsites 17-ago-2011
  6. 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. 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 & NoSQLhttp://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php
  8. 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 & NoSQLhttp://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php
  9. 9. Replicação do MySQL Server cenário usualClientsMaster Slaves WRITES READS
  10. 10. Requisitos de PerformanceThroughput e Latência... para determinado volume deleituras e escritas.Read-intensive ou Write-intensive? Ambos?Mantém os mesmos níveis quando for necessárioescalar?
  11. 11. Necessidade de escalar MySQL + PHP408 Request Time out503 Service Unavailable1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR) – Too many connections
  12. 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. 13. Relays: aplicações de leitura intensivaMaster Clients SlaveReadsWrites Master Relay Slaves
  14. 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. 15. Sharding: aplicações de escrita intensivaMaster Clients SlaveReadsWrites Partitioning Logic 1 2 3 4 5 Shards Slaves
  16. 16. Requisitos de disponibilidadeQuantos “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. 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. 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. 19. Outros usos da replicação• Backup • diminuir carga servidor • atraso programado• Análise • Datamarts • DW• Integração • dataset completo • dataset parcial
  20. 20. Boa prática: monitoramentoMySQL 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. 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 relaylogescritas 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. 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. 23. Formatos de replicação 1/2Statement-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. 24. Formatos de replicação 2/2Mixed-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. 25. LinksMySQL Replication Whitepapermysql.com/why-mysql/white-papers/mysql-wp-replication.phpMySQL Newsletter – Ed. Especial: Scaling with MySQLmysql.com/news-and-events/newsletter/2010/2010-09sp.htmlCasos de sucesso Scale-outmysql.com/why-mysql/scaleoutMySQL 5.5 Replication Docsdev.mysql.com/doc/refman/5.5/en/replication.htmlMySQL Enterprise Edition Whitepapermysql.com/why-mysql/white-papers/mysql_wp_enterprise_ready.php
  26. 26. agenda Replicação MySQL Como configurarPHP com Replicação MySQL
  27. 27. Configurar Replicação: visão geralCenário básico: 1 Master e 1 Slave1. configure usuários2. configure como Master e como Slave3. 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. 28. Passo 1/3: configure usuáriosMaster Slave1. 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. 29. Passo 2/3: configure Master e SlaveMaster Slave1. Pare o mysqld e edite o arquivo 1. Pare o mysqld e edite o arquivo de configuração de configuração2. Habilite o binlog 2. Habilite o binlog (Opcional)3. Especifique um server_id único 3. Especifique um server_id único4. 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=servername2server_id=10 [mysqld] server_id=15 dev.mysql.com/doc/refman/5.5/en/replication-howto.html
  30. 30. Passo 3/3: instrua o Slave a replicarMaster SlaveDetermine 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.000003Position: 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. 31. agenda Replicação MySQL Como configurarPHP com Replicação MySQL
  32. 32. Ambiente de testes Windows 1/31. Web server Apache HTTPd ou Glassfish ou MS-IIS ou nginx etc2. PHP runtime versão 5.3.6 ou superior3. MySQL Server 1 Master e 1 Slave, versão 5.5, BD Sakila4. Ferramentas MySQL Workbench, Netbeans, Notepad++ etcPara 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. 33. Ambiente de testes Windows 2/31. 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.exe2. 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. 34. Ambiente de testes Windows 3/31. Verificar instalação a. Criar arquivo info.php em C:xamphtdocs <?php phpinfo(); ?> b. Acessar: http://localhost:81/info.php
  35. 35. Exemplo: conectando ao MySQL<?phpecho "<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 ORDERBY 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. 36. Teste: quando o Master cai1. 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 –p3. Slave contém os dados replicados e pode ser usado para failover
  37. 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 suportadasmysqli• suporte completo às funcionalidades MySQL• Ativamente mantido e suportado pela OraclePDO_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. 38. PHP 5.3 e mysqlnd – Native Driver Infrastructure PHP Module (Extension) API ext/mysql mysqli PDO_mysql PHP Streams PHP MemoryPHP … mysqlnd PECL/mysqlnd_ms … … MySQL Server
  39. 39. mysqlnd Statistics• Por volta de 150 estatisticas coletadas• mysqli_get_client_stats(), mysqli_get_connection_stats()
  40. 40. PECL/mysqlnd_ms Stable NOV-11PHP mysqlnd replication pluginAutomatic read/write splitting • can be controlled with SQL hints • can be replaced providing callback • can be disabled for MySQL Cluster useLoad 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 hintFail over • optional, automatic connect fail overConnection pooling • Lazy connections (don’t open before use, default)
  41. 41. Transparência para aplicação
  42. 42. Exemplo: split e load balancing
  43. 43. Limitações do PECL/mysqlnd_ms1. 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 master3. para spliting são considerados SELECT e não é suportado multiplos statements inline4. native prepared statements não são suportados, a não ser client-side prepared statement emulation (como no caso do PDO_MySQL)
  44. 44. LinksMySQL com PHPdev.mysql.com/usingmysql/phpConnector/PHP User Manualdev.mysql.com/doc/refman/5.5/en/apis-php.htmlDocumentação PECL/mysqlnd_msphp.net/mysqlnd_msBlog Ulf Wendelblog.ulf-wendel.de/2011/112-stable-release-of-the-replication-and-load- balancing-plugin-for-php
  45. 45. Mais sobre MySQL
  46. 46. MySQL Treinamento e Certificação Treinamentos MySQL DBA MySQLDeveloper CertificaçõesMySQL Boot Camp MySQL Boot Camp Accelerated AcceleratedMySQL Performance MySQL Performance Tuning Boot Camp Tuning Boot Camp Accelerated AcceleratedMySQL for Begginers MySQL for BegginersMySQL for Database MySQL and PHP Administrators Developing Dynamic Web ApplicationgMySQL Performance Tuning MySQL for Developers MySQL High MySQL Advanced Availability Stored Procedures MySQL Cluster Opcional Necessário http://education.oracle.com
  47. 47. 07-dez-2011Registre-se: http://bit.ly/usLQoD
  48. 48. SumárioO 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_mspodem fazer load balancing e failover de maneira transparente para aplicações PHP.
  49. 49. Obrigado! Time MySQL Brasilmarcos.trujillo@oracle.com marcelo.t.souza@oracle.com ana.guiselini@oracle.com airton.lastori@oracle.com @MySQLBR meetup.com/MySQL-BR

×