Bom pessoal , fiz um manual de replicação de base de dados MySQL e estou compartilhando aqui no Blog para ajudar aqueles que um dia vão precisar. Nesse artigo a replicação utilizada é a Master-to-Master aonde tenho duas bases MySQL que são Master(Mestre) e Slave(Escravo) uma da outra, tendo um ambiente de replicação estável, integro e disponível.
Pré-Requisitos de Utilização:
- Ter Instalado o MySQL
Server versão 5.0.x, 5.1.x, 5.5.x no Host que será usado para replicação.
Ambiente Utilizado:
- Servidor Debian 5.0.8 Lenny
- MySQL Server 5.0.51a
Ambiente Utilizado:
- Servidor Debian 5.0.8 Lenny
- MySQL Server 5.0.51a
1.
Para configurar a
replicação do MySQL é preciso edita o arquivo my.cnf no Linux, que se
localiza em “/etc/mysql”:
1.1 Como já possuimos um
arquivo de configuração de exemplo, segue abaixo os parametros que ficará no
Servidor Master 1:
[my.cnf]
######## INICIO REPLICACAO
#################
#####
Configuracoes Servidor Replicacao ########
server-id
= 1 ##### Identificador
Servidor Master 1 ####
master-host
= 192.168.2.151 ##### Ip Servidor Master
2 #####
master-user
= replication ##### Usuario de
replicacao - Servidor Master 2 ####
master-password
= slave ##### Senha do Usuário de
replicacao - Servidor Master 2 ####
master-port
= 3306 ##### Porta de
replicacao - Servidor Master 2 ####
#######
Configurando Log #######
log-bin
= replica_cad
binlog-do-db
= cadastro_clientes #### Nome da Base
de dados que efetuara o Log ####
log-error
= erro_replica_cad
log-slave-updates
#####
Log de Vigilancia #######
relay-log = relay-log
relay-log-index =
relay-log-index
relay-log-info =
relay-log-info
######
Configurcao para manter as bases em sincronia em caso de queda #####
sync_binlog=1
###### Seleciona
a base de dados que sera replicada #######
#replicate-do-db=cadastro_clientes
######
Seleciona a Tabela da base de dados que sera replicada #######
replicate-do-table=cadastro_clientes.clientes
########
Nome do Host ou IP a ser informado ao master durante o registro da maquina
slave ########
report-host=192.168.2.150 ##### Ip Servidor Master 1 ######
report-user=replication ##### Usuario de replicacao - Servidor
Master 1 ####
report-password=slave ##### Senha do Usuário de replicacao -
Servidor Master 1 ####
report-port=3306 ##### Porta de replicacao -
Servidor Master 1 ####
######## FIM REPLICACAO
#####################
OBS: Comente as linhas abaixo a seção
, abaixo contida no my.cnf:
# The following can be used as easy to replay backup logs or for
replication.
# note: if you are setting up a replication slave, see README.Debian
about
# other settings you may
need to change.
#server-id = 1
#log_bin =
/var/log/mysql/mysql-bin.log
#expire_logs_days = 10
#max_binlog_size = 100M
#binlog_do_db =
include_database_name
#binlog_ignore_db =
include_database_name
1.2 Como já possuimos um arquivo de configuração
de exemplo, segue abaixo os parametros que ficará no Servidor Master 2:
[my.cnf]
########
INICIO REPLICACAO #################
##### Configuracoes Servidor
Replicacao ########
server-id = 2 #### Identificador -
Servidor Master 2 ####
master-host = 192.168.2.150 ##### Ip Servidor Master 1 #####
master-user = replication ##### Usuario de replicacao -
Servidor Master 1 ####
master-password = slave ##### Senha do Usuário de
replicacao - Servidor Master 1 ####
master-port = 3306 ##### Porta de replicacao -
Servidor Master 1 ####
####### Configurando Log #######
log-bin = replica_cad
binlog-do-db = cadastro_clientes #### Nome da Base de dados que efetuara o
Log ####
log-error = erro_replica_cad
log-slave-updates
##### Log de Vigilancia #######
relay-log = relay-log
relay-log-index = relay-log-index
relay-log-info = relay-log-info
###### Configurcao para manter as
bases em sincronia em caso de queda #####
sync_binlog=1
###### Seleciona a base de dados que
sera replicada #######
#replicate-do-db=cadastro_clientes
###### Seleciona a Tabela da base de
dados que sera replicada #######
replicate-do-table=cadastro_clientes.clientes
######## Nome do Host ou IP a ser
informado ao master durante o registro da maquina slave ########
report-host=192.168.2.151
##### Ip Servidor Master 2 ######
report-user=replication ##### Usuario de replicacao -
Servidor Master 2 ####
report-password=slave ##### Senha do Usuário de
replicacao - Servidor Master 2 ####
report-port=3306 ##### Porta de replicacao
- Servidor Master 2 ####
########
FIM REPLICACAO ####################
OBS: Comente as linhas abaixo a seção
, abaixo contida no my.cnf:
# The following can be used as easy to replay backup logs or for
replication.
# note: if you are setting up a replication slave, see README.Debian
about
# other settings you may
need to change.
#server-id = 1
#log_bin =
/var/log/mysql/mysql-bin.log
#expire_logs_days = 10
#max_binlog_size = 100M
#binlog_do_db =
include_database_name
#binlog_ignore_db =
include_database_name
2. Criar para Replicação das bases de dados.
Comando para criação do usuário
replication no MySQL:
grant replication slave on *.* to 'replication'@'%' identified by
'slave';
O Usuário “replication” tem que
obrigatóriamente , ser criado nos dois servidores MySQL. Tanto o Servidor
Master 1 e no Servidor Master 2.
3. Ativando a Replicação:
Se você seguiu todos os passos corretamente nesse momento o master já esta registrando gerando as informações no log binário, então agora é o momento de ligar a replicação.
Existe duas formas de ligar a replicação, uma é atraves de variaveis do my.cnf, outra é com o comando change master to, por considerar o comando change master to mais seguro escolhi essa opção:
No master execute o comando:
Show master status;
Você deve ter uma resposta parecida com essa:
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| replica_cad.000005 | 307 | cadastro_clientes| |
+------------------+-----------+--------------+------------------+
No slave execute o seguinte comando :
use as informações obtidas no comando show master status;
CHANGE MASTER TO
MASTER_HOST='nome_do_servidor_master',
MASTER_USER='usuario_para_replicacao',
MASTER_PASSWORD='senha_do_usuario',
MASTER_LOG_FILE='nome_do_log_binario',
MASTER_LOG_POS=0;
Agora execute o comando:
mysql> STOP SLAVE; START SLAVE;
Pronto , você acabou de configurar uma replicação sincronizada no Mysql.
Para verificar o status execute o comando:
show slave status\G;
E o resultado terá
que ser semelhante o abaixo:
mysql>
show slave status\G;
*************************** 1. row
***************************
Slave_IO_State: Waiting for master
to send event
Master_Host: 192.168.2.151
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: replica_cad.000010
Read_Master_Log_Pos: 352
Relay_Log_File: relay-log.000013
Relay_Log_Pos: 237
Relay_Master_Log_File: replica_cad.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table: cadastro_clientes.clientes
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 352
Relay_Log_Space: 237
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Legal, parabéns!! Show de bola.
ResponderExcluircapin
por favor poderia me manda o configuração no windows email bynhodepaula87@gmail.com
ResponderExcluirpreciso muito de ante mão te agradeço !!!
ResponderExcluirRobson,
ExcluirSegue abaixo, a configuração de replicação para Windows.
https://www.dropbox.com/s/61edgdg12yzxf0c/conf_replicacao_windows.zip
Att,
Emerson
E se quisermos colocar mais bases no conjunto?
ResponderExcluiré só adicionar o nome das bases separando com vírgula na ordem que desejar.
ExcluirEx:
replicate-do-db=cadastro_clientes, cadastro_carros
Neste caso posso efetuar leitura/escrita nos dois servidores master? o que você usou para fazer balanceamento de carga ?
ResponderExcluirNeste escopo o balanceamento estava sendo feito manualmente no servidor de aplicação que utilizava as bases. Mais geralmente o indicado é utilizar o MySQL Proxy ou produto de terceiros que atuem no mesmo propósito.
ResponderExcluirBoa tarde Emerson.
ResponderExcluirPrimeiramente parabéns pelo post, com certeza tirou várias das dúvidas que tinha sobre replicação entre bancos MySQL.
Porém (sempre tem um porém hehe) ainda tenho algumas dúvidas relacionadas ao assunto, posso te enviar um email? Posto aqui nos comentários? Qual seria a melhor forma? Claro, se for possível ajudar.
Parabéns mais uma vez pela iniciativa!
Abraços.