Replicação de Dados

MySQL

02/08/2006

Bom dia a todos.

Tenho duas máquinas com o mysql 4.0.22 e estou tentando efetuar a replicação de acordo com um artigo da DBFreeMagazine.
Na máquina 1(onde eu efetuo o replicação), eu configurei o my.ini desta forma:
[mysqld]
log-bin
server-id = 1

Na máquina 2 (de onde vem os dados), eu configurei o my.ini da seguinte forma:
[mysqld]
server-id = 2
master-host = 192.168.0.1
master-user = root
master-password =
replicate-do-db = Lojas

Depois reiniciei as duas máquinas. Quando eu eexecuto a instrução ´show slave status´, este me retorna que tenho permissão para replicação, mas não está acontecendo nada.

Alguém pode me dizer o q pode estar acontecendo?
É o usuário que não pode ser ´root´ ?
A replicação não ocorre na versão 4.0.22 ?
A replicação só ocorre após 1 hora ? Se sim, como posso diminuir este intervalo de tempo ?

Grato pela atenção.


Turbo Drive

Turbo Drive

Curtidas 0

Respostas

Mysys

Mysys

02/08/2006

1) Passos no MASTER

Antes de partir para a configuração temos que nos conectar no MySQL que será o servidor e executar:

mysql -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 285 to server version: 3.23.52-log

Type ´help;´ or ´h´ for help. Type ´c´ to clear the buffer.

mysql> GRANT FILE ON *.* TO USUARIO@HOST_SLAVE IDENTIFIED BY ´SENHA´;
Query OK, 0 rows affected (0.10 sec)

mysql> quit
Bye
/etc/rc.d/init.d/mysqld stop
cd /var/lib/mysql/minha_database
tar -czvf minha_database.tar.gz *


2) Passos no SLAVE

Vamos então copiar as tabelas compactadas no master (minha_database.tar.gz) para o diretório de dados do MySQL local, no meu caso /usr/local/mysql/data.

cd /usr/local/mysql/data/
./bin/mysql -p
Enter password: **********

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 285 to server version: 3.23.52-log
Type ´help;´ or ´h´ for help. Type ´c´ to clear the buffer.

mysql> create database minha_database;
Query OK, 1 row affected (0.00 sec)

mysql> quit
cd minha_database
killall -9 mysqld
tar -zxvf ../minha_database.tar.gz


3) Configurações do /etc/my.cnf

Configuração do /etc/my.conf do slave:
[mysqld]
master-host=192.168.1.1 # host do servidor
master-user=rafael usuário no servidor
master-password=1c3_m4n senha no servidor
master-connect-retry=60 tempo pra tentar reconectar
server-id=2 identificação
log-slave-updates registra em log as atualizações da replicação
log=/usr/local/mysql/data/mysql.log diretório de log de todas os comandos executados no mysql

[safe_mysqld]
err-log=/usr/local/mysql/data/mysql.err log de erros


Configuração do /etc/my.conf do slave:
[mysqld]
log-bin=/var/lib/mysql/binlog/mysql_bin.log # registra os logs binários as replicações
server-id=1 identificação
binlog-do-db = minha_database database a ser usada para replicação
caso deseje atualizar todas as tabelas menos uma deve-se
usar a variável binlog-ignore-db=TABELA no lugar da binlog-do-db
log=/var/log/mysqld.log local onde serão registrados os logs do mysql

[safe_mysqld]
err-log=/var/log/mysqld.err log erros do mysql

4) Iniciar e checar serviços

Inicie o mysql no servidor e depois no slave.

Vamos checar se o slave está funcionando corretamente. Digite:

cd /usr/local/mysql/data/
./bin/mysql -p

Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 285 to server version: 3.23.52-log

Type ´help;´ or ´h´ for help. Type ´c´ to clear the buffer.
mysql> show slave status;
# Que te retornará uma tabela com os dados da formatada abaixo:
Master_Host Master_User Master_Port Connect_retry
192.168.1.1 rafael 3306 60
Slave_Running Replicate_do_db Log_File Pos
dexter-bin.001 562 Yes 0
Replicate_ignore_db Last_errno Last_error Skip_counter
0 - - -

Se aparecer Yes na coluna ´Slave_Running´ parabéns, você conseguiu!!! Caso contrário, de uma olhada nos logs de erro para ver a razão disso.


5) Verificando a replicação

Insira ou altere algum valor de registro no servidor master e veja se confira se foi replicado para o slave.

6) Monitorando logs de replicação

Para ver os logs binários de replicação você vai ter que se conectar ao servidor master e executar:

mysqlbinlog /var/lib/mysql/binlog/mysql_bin.log



Testa e quero saber c deu certo ... BLZ...


GOSTEI 0
Turbo Drive

Turbo Drive

02/08/2006

Grande Mysys. Obrigado pela resposta. Eu tentei da forma q vc descrreve, mas o mnáximo que consegui, foi gerar um log com os registros q estão sendo gravados no ´master´.
Quando eu verifiquei se a replicação estava ocorrendo direito no slave, este me retornou:
´Duplicate entry for key 1´.
A maioria das minhas tabelas possuem chave primária, unique, not null. Esse erro ocorre qdo eu tento gravar um registro cuja chave primária já existe.
Ex:
Se na tabela já existir um registro com chave = 10, e eu tentar gravar outro registro com a chave = 10, então teremos este erro.
Existe alguma forma de burlar isso, pois a replicação que pretendo virá de dois bds distintos, ou seja, eu gravarei em dois BDs e replicarei em um outro BD isolado.

Grato pela atenção.


GOSTEI 0
Turbo Drive

Turbo Drive

02/08/2006

Outra coisa, no arquivo log do master, estão sendo gravados tudo que eu faço no master, mas no slave não acontece nada.
Quando eu dou um processlist nas máquinas estes me retornam isso:

No Master:
user state
root Has sent all binlog to slave; waiting for binlog to be updated

No Slave:
user state
system user Waiting for master to send event.
system user Has read all relay log; waiting for the slave I/O thread to update it

Já consultei http://dev.mysql.com/doc/refman/4.1/pt/replication-implementation-details.html, mas não me dá ssolução alguma.

O que pode estar errado aqui?


GOSTEI 0
Mysys

Mysys

02/08/2006

cara ... essse exemplo é pra voce gravar informacoes no slave e ele replicar no master .... voce DEVE ter a base de dados IGUALZINHA nos dois servidores para dar inicio a replicacao de dados..


pra voce poder dar um balao no problema chave derevistros eu faco assim

vamos supor uma venda..

NUMVND : numero da venda
CODLJA : codigo da loja

eses sao os dois campos primarios e not null ai numca vai duplicar ....

saca..

cada loja com a sua sequencia..



testa ai .do SLAVE para o MASTER so que a base deve ser igual nos dois antes de voce startar o servico...


um abraço


GOSTEI 0
Rpgufv

Rpgufv

02/08/2006

Ola, estou pesquisando sobre essa replicacao de dados no MySQL e
me interessei muito nessa conversa, acho q podem me ajudar. A minha
duvida eh praticamente a mesma do Turbo Drive, so uma diferenca.

O sistema que estou planejando eh um sistema de controle comercial,
ou seja, uma base sera a base da loja (uma para cada filial, claro) e a
outra base eh da matriz, que ira consolidar toda informacao das filiais.

Com a replicacao eu consigo ter todo cadastro (vendas, compras, ...)
feito nas filiais para a matriz, PERFEITO, mas o problema sao as mudancas
feitas na matriz que devem ser atualizadas tb nas filiais, como cadastro
de usuarios, produtos, fabricantes, fornecedores, ...

A duvida eh, como eu faria para ter essa replicacao nos dois sentidos?
Seria estabelecer 2 bases de dados para a matriz, uma sendo a MASTER
das filiais e a outra sendo a SLAVE das filiais? (se eh q da pra entender)

Bom, valeu a ajuda!
rpg


GOSTEI 0
Maolbar

Maolbar

02/08/2006

Olá amigo!

Seguinte, vih que vc conseguiu fazer uma replicação master - master! Fiquei muito feliz por ter conseguido tb!

Mas tenho uma dúvida, gostaria muito de poder fazer uma replicação multi-master com mais de 3 servidores atuando como master/slave, todos com configuração comunicação bidirecional.

Seria possivel configurar no arquivo my.cnf mais de um host de replicação? ou ele só aceita um ??

Essa é a topologia que eu gostaria de fazer:

A > B > A
A> C > A
B > C > B

aff... seria possível isso?? Tenho minhas duvidas de como ficaria o arquivo my.cnf em cada servidor.

Se poder me ajudar ficarei muito agradecido!


GOSTEI 0
POSTAR