O documento discute replicação MySQL e como configurar PHP para usar replicação MySQL. Ele explica como configurar um servidor mestre e escravo para replicação, mostra exemplos de código PHP para se conectar ao MySQL e discute as extensões PHP para MySQL, incluindo mysql, mysqli e PDO_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
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
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
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
%
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)
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