Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Mysql Replication
1. Mysql Replication
André Herculano
andresilveirah@gmail.com
Thursday, December 13, 12
2. Contexto
• O objetivo:
• Migrar aplicações de um servidor para o
outro com o mínimo de downtime;
• O Problema:
• Interações com a base de dados durante
o processo de migração poderiam levar a
base a um estado inconsistente;
Thursday, December 13, 12
3. Soluções
XtraBackup
Ferramenta open source para
backup de servidores MySql com
engine InnoDB;
Prós:
Realiza backup da base de dados
sem a necessidade de lock nas
tabelas.
Thursday, December 13, 12
4. Soluções
MySQL Replication + Mysqldump
Feito através do já implementado
processo de Master - Slave e dump
via Mysqldump
Prós:
Simples de implementar;
Nativo do banco;
Bem documentado;
Contra:
Dump via myslqdump exige o read
lock das tabelas;
Thursday, December 13, 12
5. MySql Master- Slave
• Toda operação que acontece no servidor master é replicado
para os slaves. O contrário não é verdadeiro.
• Comunicação se dá via TCP;
• Dowtime só é necessário, caso o servidor master não tenha
sido preparado préviamente para ser master;
Thursday, December 13, 12
6. #Comofas
1. Preparar o servidor Master para ser master (my.cnf):
[mysqld]
log-bin=mysql-bin
server-id=1
bind-address = 0.0.0.0 #ou ip do slave
binlog-do-db = <database1> # bancos a serem replicados
binlog-do-db = <database2> # bancos a serem replicados
binlog-ignore-db = mysql
2. Dar permissões para o usuário que fará a replicação
mysql> GRANT REPLICATION SLAVE ON *.* TO 'user'@'<ip do
slave>' IDENTIFIED BY 'password';
Thursday, December 13, 12
7. #Comofas
3. Obter um snapshot do master
mysql> FLUSH TABLES WITH READ LOCK;
# em outra sessão do mysql
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | db1 | mysql |
+------------------+----------+--------------+------------------+
# caso o slave esteja vazio, realizar o dump do banco ainda com as
# tabelas em lock (vide ultimo slide)
mysql > UNLOCK TABLES;
Essas informações serão necessárias para a configuração do
slave.
Thursday, December 13, 12
8. #Comofas
4. Configurar o Slave (my.cnf):
[mysqld]
server-id=2
replicate-do-db= <database1>
replicate-do-db= <database2>
# caso queira preparar o slave para ser um futuro master também
log-bin=mysql-bin
bind-address = 0.0.0.0 # ou ip do slave
binlog-do-db = <database1> # bancos a serem replicados
binlog-do-db = <database2> # bancos a serem replicados
binlog-ignore-db = mysql
ps: para que as configurações do mysql sejam aplicadas o
serviço deve ser reiniciado.
$ sudo service mysql (ou mysqld) restart
Thursday, December 13, 12
9. #Comofas
5. Apontar o slave para o Master:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host', #ip ou nome do host
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
Aqui usamos as informações obtidas no snapshot do passo 4
6. Apontar o slave para o Master:
mysql> START SLAVE;
Thursday, December 13, 12
10. #Comofas
7. Sabendo se está tudo certo:
mysql> show slave statusG;
...
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Observar o ‘Last_IO_Error’.
Um erro comum é o Access Denied
• Verificar via telnet se a porta 3306 está aberta;
• Verificar os previlégios do usuário escolhido para a
replicação;
• Tentar conectar no mysql do master via terminal pelo
slave;
Thursday, December 13, 12
11. #Comofas
Importante:
Caso o Slave esteja vazio, o backup do master deve ser
restaurado no slave ANTES de a replicação Master - Slave
começar;
# no master
mysqldump -u username -p --databases db1 db2 db3 > dump.sql
#no slave
mysql -u username -p < dump.sql
Thursday, December 13, 12
12. Mais Materiais
• http://www.percona.com/files/presentations/percona-live/dc-2012/
PLDC2012-introduction-to-mysql-replication.pdf
• http://dev.mysql.com/doc/refman/5.0/en/replication.html
• http://www.infobora.info/high-availability-with-a-masterslave-mysql-
configuration/
• http://erlycoder.com/43/mysql-master-slave-and-master-master-replication-
step-by-step-configuration-instructions-
Thursday, December 13, 12
13. Obrigado
André Herculano
andresilveirah@gmail.com
Thursday, December 13, 12