É possível extrair os valores do mês passado de um servidor MySQL e criar um novo banco de dados a partir desses valores?

8

Eu tenho uma atribuição para criar um modelo de máquina virtual de desenvolvimento.

Eu preciso adicionar ao servidor os bancos de dados MySQL de cada um dos produtos da minha empresa, para que novos desenvolvedores tenham a capacidade de desenvolver para cada um dos produtos.

A maioria dos bancos de dados é menor que 1 GB.

Mas eu tenho alguns bancos de dados enormes (cerca de 160G) - mas sou limitado no tamanho do modelo que estou tentando criar, e não é razoável adicionar um banco de dados de 160GB.

Portanto, estou tentando encontrar o método certo para extrair, digamos, os valores do mês passado desse enorme banco de dados e adicioná-los ao servidor para que o desenvolvedor possa "sentir" como é trabalhar nesse banco de dados.

É possível fazer uma coisa dessas e como é feito? Obrigado!

Editar:

Infelizmente, não há opção para um servidor de banco de dados principal separado que mantenha todos os bancos de dados de desenvolvimento; também não há necessidade de atualizar os dados regularmente; eu só preciso apresentar os mesmos dados que nos servidores de produção (em um período aleatório) como um ambiente sandbox para novos desenvolvedores.

Itai Ganot
fonte

Respostas:

8

Se entendi corretamente, você planeja fazer uma cópia de banco de dados separada para cada ambiente de desenvolvimento.

Embora isso seja possível com pequenos bancos de dados, não funcionará tão bem com grandes bancos de dados. Portanto, a menos que você tenha um bom motivo para configurar um banco de dados separado para cada ambiente, é melhor considerar ter uma única cópia do banco de dados de desenvolvimento e definir todos os ambientes de desenvolvimento para usá-lo.

Essa abordagem permitirá que você atualize o banco de dados de desenvolvimento periodicamente com os dados mais recentes e se alguém estragar tudo, basta atualizá-lo novamente.

Imagine também a situação em que seus desenvolvedores começam a trabalhar em algum novo projeto que requer a criação de novas tabelas. Se você tiver uma única cópia do banco de dados de desenvolvimento, você (ou desenvolvedores) precisará criar essas tabelas e preenchê-las com dados de teste apenas uma vez. Agora imagine que os desenvolvedores percebam que a estrutura inicial da tabela não é ótima e precisa ser alterada. Novamente, isso precisará ser feito em um único banco de dados, em oposição a possivelmente dezenas de ambientes.

Essa é a abordagem que eu vi sendo usada para grandes projetos várias vezes e na maioria das vezes funciona muito bem.

grekasius
fonte
2
Em uma loja onde trabalho, todo desenvolvedor tem sua própria cópia do banco de dados, para que ninguém pise nos dedos de outras pessoas. Isso funcionou muito bem para nós. Temos scripts para reconstruir o banco de dados do zero e preenchê-lo com os dados de teste necessários para o desenvolvimento. O banco de dados único costuma ser problemático com pessoas que trabalham em algumas áreas do banco de dados, quebrando-o para outras pessoas. E então todos param enquanto um grande banco de dados está sendo restaurado. Portanto, ter um único banco de dados NÃO é uma solução superior. (TBH nem é É situacional..)
Andrew Savinykh
Acordado. Por curiosidade, qual o tamanho dos seus DBs? Não vejo como isso funcionaria com um banco de dados de 160 GB.
grekasius
É claro que os bancos de dados dev seriam intencionalmente pequenos, com apenas o subconjunto de dados necessário para testar o que os desenvolvedores estão trabalhando. Para fins como teste de desempenho, uma instância separada (maior) seria usada.
Andrew Savinykh
Não sou obrigado a atualizar os dados regularmente, apenas para colocá-los uma vez neste modelo.
Itai Ganot 30/07/2014
Veja se você pode criar um pequeno conjunto de dados de amostra do seu banco de dados atual. Infelizmente, não há uma resposta direta aqui. O que você precisa fazer depende dos dados que você possui e do que você escolhe colocar no banco de dados do desenvolvedor.
grekasius
4

Isso é extremamente dependente do tipo de dados no banco de dados. Em alguns casos, pode ser tão fácil quanto

select * from table where date > ....

enquanto em outros casos, é impossível separar isso por causa da estrutura dos dados. No final, provavelmente será uma mistura e muito difícil de acertar.

Sven
fonte
2
Especificamente, alguns bancos de dados podem ter entradas mais recentes (por exemplo, <1 mês) que fazem referência a registros de entradas mais antigas (por exemplo,> 1 mês). A maneira como você lida com eles depende inteiramente de como essas referências são configuradas e é inviável para todos, exceto os mais básicos.
27414 Bob
0

Recentemente, tivemos a situação em que um cliente desejava extrair os últimos 30 dias de um banco de dados. Se TODAS as tabelas tiverem o mesmo atributo, onde você poderá definir a data e hora, poderá fazer uma

mysqldump --where = 'datetimefield> "28/06/2014"'

mas ele queria misturar tabelas diferentes com dados antigos e novos. Portanto, isso não era solução para ele, mas poderia ser uma solução para você?

shinguz
fonte