MySQL replicate structure only

1

Posso configurar o MySQL como escravo apenas replicando mudanças na estrutura? ( CREATE / ALTER TABLE etc.). Eu tenho 2 razões para isso:

  1. Vários desenvolvedores com ramificações de desenvolvimento no código, que devem sempre trabalhar com uma estrutura de dados 'nova', obtida de um banco de dados de desenvolvimento 'principal'.
  2. Vários projetos / clientes que compartilham (parte) o mesmo código / scripts (pense em um diretório 'core' com links simbólicos), mas com bancos de dados diferentes (1 por cliente), cuja estrutura deve ser atualizada simultaneamente com alterações de código a parte compartilhada do código, com um tempo mínimo de inatividade.

Se isso não for possível, quais outras boas maneiras de sincronizar as estruturas de dados do mysql sem os dados reais em sites / bancos de dados / servidores? E não, mudanças estruturais não acontecem com tanta frequência, mas com bancos de dados diferentes o suficiente para passar algum tempo gastando a sincronização de todas as instâncias, e eu gostaria de limitar o tempo de inatividade e gastar meu tempo em trabalhos mais interessantes;). / p>     

por Wrikken 01.09.2010 / 16:05

3 respostas

2

Eu normalmente despejo o esquema usando mysqldump. No entanto, acredito que o mecanismo blackhole poderia ser usado como você descreve.

Você deve ALTER todas as tabelas para BLACKHOLE e INSERT , UPDATE e DELETE registros não afetam os dados, pois blackhole não armazena os dados.

Você pode skip-innodb e definir default-storage-engine=BLACKHOLE e todas as tabelas criadas serão padronizadas como BLACKHOLE , exceto aquelas criadas como MyISAM , pois MyISAM não pode ser desativado. Você precisa estar ciente disso ao criar tabelas no mestre, já que você pode precisar posteriormente ALTER de volta para BLACKHOLE no replicante escravo.

No entanto, o que você descreve é uma questão administrativa e não um problema técnico. Eu recomendo configurar pelo menos dois bancos de dados de desenvolvimento, que seriam mantidos pela equipe de infraestrutura.

O primeiro, seria um banco de dados de desenvolvimento. Os desenvolvedores têm mais acesso a esse banco de dados e seriam atualizados regularmente com dados limpos.

O segundo banco de dados seria um ambiente de controle de qualidade ou de teste, ao qual os desenvolvedores não teriam acesso ao RW. Isso permite a preparação adequada.

Esses dois bancos de dados seriam verificados pelo profissional de TI fazendo alterações de produção no banco de dados e seriam incluídos como parte do processo de preparação para a produção, o que garante esquemas consistentes em todos os ambientes.

Se você quiser que os desenvolvedores tenham bancos de dados em todo o lugar, eles simplesmente não poderão ser mantidos e será responsabilidade deles garantir que o conjunto de dados esteja atualizado o suficiente para suas necessidades. Você pode fornecer programaticamente um dump de esquema em uma unidade compartilhada ou talvez um escravo de replicação blackhole com acesso RO.

    
por 01.09.2010 / 16:33
1

Infelizmente, a replicação do MySQL não permite isso. O que você pode fazer é executar regularmente mysqldump -d , que despejará o banco de dados e a estrutura da tabela, mas deixará de fora os dados. Você pode então importar essa estrutura para um novo banco de dados.

De man mysqldump :

--no-data, -d

          Do not write any row information for the table. This is very useful if
          you want to dump only the CREATE TABLE statement for the table.

Fazemos isso onde eu trabalho atualmente. Como parte de qualquer alteração no banco de dados, executamos esse comando e o salvamos em um arquivo e o colocamos no controle de origem. Os desenvolvedores simplesmente baixam o arquivo e aplicam as alterações.

    
por 01.09.2010 / 16:17
0

Desde que você mencionou o symlinking, eu assumirei que as instâncias do MySQL, ou vários bancos de dados, estão no mesmo servidor ou têm acesso às mesmas unidades.

Assumindo isso, eu tentaria fazer o symlinking do mestre .frm para o slave .frm. Desta forma, sempre que o mestre é atualizado com mudanças estruturais, o escravo é atualizado automaticamente, mas eles não compartilham dados. Eu realmente não tentei isso, mas deveria funcionar em teoria.

"Cada tabela MyISAM é armazenada no disco em três arquivos. Os arquivos têm nomes que começam com o nome da tabela e têm uma extensão para indicar o tipo de arquivo. Um arquivo .frm armazena o formato da tabela. O arquivo de dados tem uma extensão .MYD (MYData). O arquivo de índice tem uma extensão .MYI (MYIndex). "

    
por 01.09.2010 / 18:00