Est-il possible d'extraire les valeurs du mois dernier d'un serveur MySQL et de construire une nouvelle base de données à partir de ces valeurs?

8

J'ai une mission pour construire un modèle de machine virtuelle de développement.

Je dois ajouter au serveur des bases de données MySQL à partir de chacun des produits de mon entreprise afin que les nouveaux développeurs aient la possibilité de développer pour chacun des produits.

La plupart des bases de données sont inférieures à 1 Go.

Mais j'ai quelques bases de données qui sont énormes (environ 160G) - mais je suis limité dans la taille du modèle que j'essaie de créer, et il n'est pas raisonnable d'y ajouter une base de données de 160 Go.

Par conséquent, j'essaie de trouver la bonne méthode pour extraire, disons, les valeurs du mois dernier de cette énorme base de données et les ajouter au serveur afin que le développeur puisse «ressentir» ce que c'est que de travailler sur cette base de données.

Est-il possible de faire une telle chose et comment cela se fait-il? Merci!

Éditer:

Malheureusement, il n'y a pas d'option pour un serveur DB principal séparé qui contiendra toutes les bases de données de développement, il n'y a pas non plus d'obligation de mettre à jour les données régulièrement, j'ai juste besoin de présenter les mêmes données que sur les serveurs de production (à une période aléatoire) en tant que environnement sandbox pour les nouveaux développeurs.

Itai Ganot
la source

Réponses:

8

Si j'ai bien compris, vous prévoyez de faire une copie de base de données distincte pour chaque environnement de développement.

Bien que cela puisse être possible avec de petites bases de données, cela ne fonctionnera pas aussi bien avec de grandes bases de données. Donc, sauf si vous avez une très bonne raison de configurer une base de données distincte pour chaque environnement, il peut être préférable d'envisager d'avoir une seule copie de la base de données de développement et de configurer tous les environnements de développement pour l'utiliser.

Cette approche vous permettra d'actualiser périodiquement la base de données de développement avec les dernières données et si quelqu'un les gâche, vous pouvez simplement les actualiser à nouveau.

Imaginez également la situation où vos développeurs commencent à travailler sur un nouveau projet qui nécessite la création de nouvelles tables. Si vous avez une seule copie de la base de données de développement, vous (ou les développeurs) devrez créer ces tables et les remplir de données de test une seule fois. Imaginez maintenant que les développeurs réalisent que la structure initiale de la table n'est pas optimale et doit être modifiée. Encore une fois, cela devra être fait sur une seule base de données, par opposition à des dizaines d'environnements.

C'est l'approche que j'ai vue être utilisée à maintes reprises pour de grands projets et la plupart du temps, cela fonctionne plutôt bien.

grekasius
la source
2
Dans une boutique où je travaille, chaque développeur a sa propre copie de la base de données afin que personne ne marche sur les pieds des autres. Cela a très bien fonctionné pour nous. Nous avons des scripts pour reconstruire la base de données à partir de zéro et la remplir avec les données de test requises pour le développement. La base de données unique a souvent été problématique avec des personnes travaillant sur certaines zones de base de données qui l'ont cassée pour d'autres personnes. Et puis tout le monde s'arrête pendant qu'une grosse base de données est en cours de restauration. Donc, avoir une seule base de données n'est PAS une solution supérieure. (TBH non plus. Il est situationnel.)
Andrew Savinykh
D'accord. Par curiosité, quelle est la taille de vos bases de données? Je ne vois pas comment cela pourrait fonctionner avec une base de données de 160 Go.
grekasius
Bien sûr, les bases de données dev seraient intentionnellement petites avec seulement le sous-ensemble de données nécessaires pour tester tout ce sur quoi les développeurs travaillent. À des fins telles que les tests de performances, une instance distincte (plus grande) serait utilisée.
Andrew Savinykh
Je ne suis pas obligé de mettre à jour les données régulièrement, juste pour les placer une fois dans ce modèle.
Itai Ganot
Jetez un œil si vous pouvez créer un petit ensemble de données d'exemple à partir de votre base de données actuelle. Il n'y a malheureusement pas de réponse simple ici. Ce que vous devez faire dépend des données dont vous disposez et de ce que vous choisissez de mettre dans cette base de données de développement.
grekasius
4

Cela dépend fortement du type de données dans la base de données. Dans certains cas, cela peut être aussi simple que

select * from table where date > ....

alors que dans d'autres cas, il est impossible de séparer cela en raison de la structure des données. En fin de compte, ce sera probablement un mélange et il sera très difficile de bien faire les choses.

Sven
la source
2
Plus précisément, certaines bases de données peuvent avoir des entrées plus récentes (disons <1 mois) qui font référence à des enregistrements d'anciennes entrées (disons> 1 mois). La façon dont vous les traitez dépend entièrement de la façon dont ces références sont configurées et est irréalisable pour tous, sauf les plus élémentaires.
Bob
0

Nous avons récemment rencontré un client qui souhaitait extraire les 30 derniers jours d'une base de données. Si TOUTES les tables ont le même attribut où vous pouvez définir le datetime, vous pouvez faire un

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

mais il voulait mélanger différentes tables avec des données anciennes et nouvelles. Donc ce n'était pas une solution pour lui mais ça pourrait en être une pour vous?

shinguz
la source