mysql - melhores práticas de replicação de dados
TRANSCRIPT
MySQL - Melhores práticas de replicação
de dados
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
Agenda> Topologias> Como Funciona ?> Formatos de logs> Métodos de sincronia> Crash safe> SSL> GTID> Heartbeat> Checksum> Variáveis / Dicas importantes> Monitoramento
Topologias
Topologias - Master -> Slave
Topologias - Multi Master
● auto_increment_increment = 2
● auto_increment_offset = 1
● auto_increment_increment = 2
● auto_increment_offset = 2
Topologias - Ring / Circular
Topologias - Ring / Circular
Como Funciona ?
Como Funciona?
Como Funciona?
Como Funciona?
Como Funciona?
Como Funciona?
Formatos de logs
Formatos de logs - STATEMENT
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
Formatos de logs - ROW● binlog_rows_query_log_events (> 5.6.2 )
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
Métodos de sincronia
Métodos de sincronia - asynchronous
Métodos de sincronia - asynchronous● Método padrão de sincronía
✓ Commit é mais rápido
× Risco maior de perda de dados
Métodos de sincronia - seminchronous
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
Crash safe
Crash safe
● master.info
● relay-log.info
Crash safe
Crash safe● relay-log-info-repository=TABLE
● relay-log-recovery=1
● master_info_repository=TABLE
● mysql.slave_master_info
● mysql.slave_relay_log_info
SSL
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
GTID
GTID● Global Transaction IDentifier
● Server UUID + ID Transação
GTID● Auto posição nos slaves
○ MASTER_LOG_FILE○ MASTER_LOG_POS○ MASTER_AUTO_POSITION=1
Heartbeat
Heartbeat● Percona toolkit - pt-heartbeat● Table on master + cron
Checksum
Checksum● MySQL Utilities - mysqlrplsync● Percona toolkit - pt-table-checksum
● Percona toolkit - pt-table-sync
Variáveis / dicas importantes
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
Monitoramento
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
Perguntas ?
Perguntas ?● @altmannmarcelo
● pt.planet.mysql.com
● Forum em português - http://forums.mysql.com/list.php?72