MySQL usando replicação a nível de tabelas [RESOLVIDO]

1. MySQL usando replicação a nível de tabelas [RESOLVIDO]

Glauco
esglaucoluiz

(usa CentOS)

Enviado em 22/05/2012 - 13:42h

Gostaria de saber o seguinte em uma replicação de um servidor master para outro slave, será que consigo fazer a nível de tabelas em vez de fazer com o banco de dados todo?


eu tenho o banco de dados "empresa", dentro dele tem as tabelas "clientes", "vendas" e "produtos"


eu queria saber se consigo usar uma replicação para atualizar somente as tabelas "clientes" e "produtos" a partir do servidor master e o slave usaria a tabela "vendas".

será que da certo??






  


2. Ola

Fábio de Souza
splendide

(usa openSUSE)

Enviado em 22/05/2012 - 14:04h

Já deu uma olhada aqui?
http://dev.mysql.com/doc/refman/5.0/en/replication-rules.html



Não sei como funciona seu sistema, mas talvez um dump no mysql, seguido de uma exportação personalizada deva funcionar, não manjo de mysql mto bem.


3. Re: MySQL usando replicação a nível de tabelas [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 22/05/2012 - 20:49h

splendide escreveu:

Já deu uma olhada aqui?
http://dev.mysql.com/doc/refman/5.0/en/replication-rules.html



Não sei como funciona seu sistema, mas talvez um dump no mysql, seguido de uma exportação personalizada deva funcionar, não manjo de mysql mto bem.


O problema do dump no mysql é que vai parar o banco por alguns momentos. Se as tabelas forem animais, esse tempo pode ser grande.
Acho que ele quer fazer isso sem parar nada. A replicação parcial de dados sugerida por vc @splendide é bem interessante sim.
Faz um tempo que estava tendo problemas com a replicação porque os dados ficavam sempre atrasados.

Usar o arquivo de log do mysql para pegar somente as alterações de uma tabela é interessante, mas desde que não tenha transactions.
Assim pode deixar um script rodando em bg no slave executando as queries na tabela necessária sem parar os processos.
Se a tabela só recebe inserts é bem fácil. Se ele tem updates precisa ficar atento na sequência das instruções sql.

Eu abandonei a algum tempo este tipo de construção porque precisei usar transactions mas funciona legal em tabelas de log e históricos que não tem alterações e sim inclusões.

Acho que o @graukerts tem que analisar a aplicação para ver o que é melhor.



4. Re: MySQL usando replicação a nível de tabelas [RESOLVIDO]

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 22/05/2012 - 22:52h

cara... tem um jeito só que é trabalhoso...

primeiro vc precisa saber que cada tabela fica residente em um arquivo dento de /var/lib/mysql

suponhamos que eu tenha um banco de dados chamado "si" e dento dele duas tabelas, "material" e "material2"
e eu quero copiar o banco "si" apenas com "material"
vc da um stop no sql, e copia a pasta "si" para /var/lib/mysql do outro servidor e apaga a tabela "material2"
depois troca o dono da pasta de root para o usuario mysql com o comando "chown mysql:mysql -R si"
por fim vc renicia e ve se da certo...

uma coisa muito importante é o fato de que o musql do novo servidor tem que ter a mesma versão
na verdade eu só fiz backup assim de bases inteiras, nunca de tabelas especificas... mas acho que talvez resolva
falww


5. Re: MySQL usando replicação a nível de tabelas [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 22/05/2012 - 23:03h

hudyfx escreveu:

cara... tem um jeito só que é trabalhoso...

primeiro vc precisa saber que cada tabela fica residente em um arquivo dento de /var/lib/mysql

suponhamos que eu tenha um banco de dados chamado "si" e dento dele duas tabelas, "material" e "material2"
e eu quero copiar o banco "si" apenas com "material"
vc da um stop no sql, e copia a pasta "si" para /var/lib/mysql do outro servidor e apaga a tabela "material2"
depois troca o dono da pasta de root para o usuario mysql com o comando "chown mysql:mysql -R si"
por fim vc renicia e ve se da certo...

uma coisa muito importante é o fato de que o musql do novo servidor tem que ter a mesma versão
na verdade eu só fiz backup assim de bases inteiras, nunca de tabelas especificas... mas acho que talvez resolva
falww


Esta opção @hudyfx funciona, mas o banco tem que parar. Acho que ele não deseja que o serviço saia do ar e sim que a dita tabela fique atualizada para que ele faça pesquisa nela. Esse lance de copiar as tabelas do mysql funcionava legal até a versão 4. do mysql. Hoje em dia ela não é recomendada porque geralmente estão em innodb e não mysam. O tipo da tabela faz uma diferença danada até quando se usa a replicação ou paralelismo. Convivo com tabelas que tem gigabytes e transporta-las hoje em dia é impossível. Só usando replicação via serviço mysql entre master, slave / slave / slave. E mesmo assim as vezes demora pra ficar disponível certas atualizações. Tudo depende de quantos inserts e updates. No meu caso alguns milhões diários.





6. Re: MySQL usando replicação a nível de tabelas [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 23/05/2012 - 01:00h

Procure sobre link server pra mysql, uso isso no postgres e sql server é a solução.

Dai basta criar uma view para a tabela origem e pronto.


7. MySQL usando replicação a nível de tabelas

Glauco
esglaucoluiz

(usa CentOS)

Enviado em 23/05/2012 - 12:33h

Obrigado pela ajuda de todos.


Eu estou fazendo o seguinte. Dentro no my.cnf eu consigo definir se quero copiar as bases ou tabelas e foi isso que fiz. Em vez de usar o replicate-do-db, agora estou usando replicate-do-table, o complicado é que tenho mais de 200 tabelas, mas talvez eu faça na unha mesmo, por que eu tenho certinho as tabelas que preciso atualizar e as que não preciso.

no servidor master /etc/my.cnf só a parte da configuração que alterei:

[mysqld]

server-id=1
log-bin=/var/log/mysql/mysql-bin.log
binlog-do-db=omteste
binlog-do-db=omweb

essa são as duas tabelas que ele está abrindo para replicagem

no servidor slave

[mysqld]

server-id=2
master-host=192.168.1.135
master-connect-retry=60
master-user=replicagem
master-password=XXXXXX

#AQUI REPLICA A BASE TODA
#replicate-do-db=omteste #AQUI REPLICA A BASE TODA

#AQUI REPLICA SOMENTE AS TABELAS
replicate-do-table=omteste.produtos omteste.funcionarios omteste.listaservicos omteste.vendedores

relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

Estou testando agora, jaja eu volto com uma resposta

Obrigado a todos









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts