![Page 1: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/1.jpg)
MySQL - Melhores práticas de replicação
de dados
![Page 2: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/2.jpg)
Marcelo AltmannTécnologo em Sistemas para Internet
MySQL DBA @ IEDR
Blogueiro
blog.marceloaltmann.com
imasters.com.br/secao/banco-de-dados/mysql/
Oracle Certified Professional , MySQL 5 Database Administrator
Oracle Certified Professional , MySQL 5 Developer
Oracle Certified Associate , MySQL 5.0 / 5.1 / 5.5
![Page 3: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/3.jpg)
Agenda> Topologias> Como Funciona ?> Formatos de logs> Métodos de sincronia> Crash safe> SSL> GTID> Heartbeat> Checksum> Variáveis / Dicas importantes> Monitoramento
![Page 4: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/4.jpg)
Topologias
![Page 5: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/5.jpg)
Topologias - Master -> Slave
![Page 6: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/6.jpg)
Topologias - Multi Master
● auto_increment_increment = 2
● auto_increment_offset = 1
● auto_increment_increment = 2
● auto_increment_offset = 2
![Page 7: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/7.jpg)
Topologias - Ring / Circular
![Page 8: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/8.jpg)
Topologias - Ring / Circular
![Page 9: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/9.jpg)
Como Funciona ?
![Page 10: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/10.jpg)
Como Funciona?
![Page 11: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/11.jpg)
Como Funciona?
![Page 12: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/12.jpg)
Como Funciona?
![Page 13: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/13.jpg)
Como Funciona?
![Page 14: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/14.jpg)
Como Funciona?
![Page 15: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/15.jpg)
Formatos de logs
![Page 16: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/16.jpg)
Formatos de logs - STATEMENT
![Page 17: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/17.jpg)
Formatos de logs - STATEMENT● binlog_format = STATEMENT
● Formato padrão até a versão 5.7.6✓ Formato consolidado, existe desde a versão 3.23
✓ Requer pouco espaço para armazenamento
✓ Fácil leitura (mysqlbinlog)
× Pode gerar inconsistencia de dados (queries não determinísticas) - https://goo.gl/cpDd0h
× Requer mais processamento
× Requer mais locking
![Page 18: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/18.jpg)
Formatos de logs - ROW● binlog_rows_query_log_events (> 5.6.2 )
![Page 19: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/19.jpg)
Formatos de logs - ROW● binlog_format = ROW
● binlog_rows_query_log_events (> 5.6.2 )
● binlog_row_image=minimal
● Formato padrão desde a versão 5.7.7✓ Requer menos locking
✓ Utiliza menos processamento
✓ Todas as queries podem ser replicadas, maneira mais segura de replicação
× Requer mais espaço em disco / capacidade de rede
![Page 20: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/20.jpg)
Métodos de sincronia
![Page 21: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/21.jpg)
Métodos de sincronia - asynchronous
![Page 22: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/22.jpg)
Métodos de sincronia - asynchronous● Método padrão de sincronía
✓ Commit é mais rápido
× Risco maior de perda de dados
![Page 23: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/23.jpg)
Métodos de sincronia - seminchronous
![Page 24: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/24.jpg)
Métodos de sincronia - semisynchronous● Diponível a partir da versão 5.5
● MASTER:○ INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';○ rpl_semi_sync_master_enabled = 1○ rpl_semi_sync_master_timeout = N - - padrão 10 segundos
● SLAVE:○ INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';○ rpl_semi_sync_slave_enabled = 1
✓ Menor risco de perda de dados
× Commit é mais demorado
![Page 25: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/25.jpg)
Crash safe
![Page 26: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/26.jpg)
Crash safe
● master.info
● relay-log.info
![Page 27: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/27.jpg)
Crash safe
![Page 28: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/28.jpg)
Crash safe● relay-log-info-repository=TABLE
● relay-log-recovery=1
● master_info_repository=TABLE
● mysql.slave_master_info
● mysql.slave_relay_log_info
![Page 29: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/29.jpg)
SSL
![Page 30: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/30.jpg)
SSL● Tutorial - https://goo.gl/zPGRJh
● Configurar Master e Slaves para utilizar SSL
● Forçar usuário de replicação a utilizar SSL ( REQUIRE SSL )
● Reconfigurar replicação ( CHANGE MASTER TO) para utilizar SSL
![Page 31: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/31.jpg)
GTID
![Page 32: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/32.jpg)
GTID● Global Transaction IDentifier
● Server UUID + ID Transação
![Page 33: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/33.jpg)
GTID● Auto posição nos slaves
○ MASTER_LOG_FILE○ MASTER_LOG_POS○ MASTER_AUTO_POSITION=1
![Page 34: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/34.jpg)
Heartbeat
![Page 35: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/35.jpg)
Heartbeat● Percona toolkit - pt-heartbeat● Table on master + cron
![Page 36: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/36.jpg)
Checksum
![Page 37: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/37.jpg)
Checksum● MySQL Utilities - mysqlrplsync● Percona toolkit - pt-table-checksum
● Percona toolkit - pt-table-sync
![Page 38: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/38.jpg)
Variáveis / dicas importantes
![Page 39: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/39.jpg)
Variáveis / dicas importantes● log_slave_updates● slave_net_timeout (padrão 3600)● sync_binlog● slave-parallel-workers ( 5.6+)● max_binlog_size (padrão 1G )● expire_logs_days● read_only● replicate-do-table=db_name.tbl_name / replicate-ignore-table=db_name.tbl_name
○ replicate-do-db / replicate-ignore-db / binlog-do-db / binlog-ignore-db● Delayed slave - CHANGE MASTER TO MASTER_DELAY = N;● mysqlbinlog --read-from-remote-server --stop-never --raw
![Page 40: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/40.jpg)
Monitoramento
![Page 41: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/41.jpg)
Monitoramento● SHOW SLAVE HOSTS - - MASTER● SHOW SLAVE STATUS - - SLAVE
○ Slave_IO_Running○ Last_IO_Errno○ Last_IO_Error○ Slave_SQL_Running○ Last_SQL_Errno○ Last_SQL_Error○ Seconds_Behind_Master
● Nagios● Munin / Cacti
![Page 42: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/42.jpg)
Perguntas ?
![Page 43: MySQL - Melhores práticas de replicação de dados](https://reader036.vdocuments.site/reader036/viewer/2022081420/58f330f41a28abf5638b4587/html5/thumbnails/43.jpg)
Perguntas ?● @altmannmarcelo
● pt.planet.mysql.com
● Forum em português - http://forums.mysql.com/list.php?72