Fórum Replicação de Dados #30731
02/08/2006
0
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
Curtir tópico
+ 0Posts
04/08/2006
Mysys
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
04/08/2006
Turbo Drive
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
04/08/2006
Turbo Drive
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
04/08/2006
Mysys
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
04/12/2006
Rpgufv
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
14/06/2008
Maolbar
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
Clique aqui para fazer login e interagir na Comunidade :)