web-dev-qa-db-fra.com

Comment dupliquer une base de données MySQL sur le même serveur

J'ai une grande base de données MySQL, appelons-la live_db, que je veux répliquer sur la même machine pour fournir un système de test avec lequel jouer (test_db), y compris la structure des tableaux et les données. À intervalles réguliers, je souhaite mettre à jour le test_db avec le contenu du live_db; si possible incrémentiel.

Existe-t-il un mécanisme intégré dans MySQL pour le faire? Je pense que la réplication maître-esclave n'est pas la chose que je veux, car il devrait être possible de modifier les données dans le test_db. Ces modifications ne doivent cependant pas être conservées.

Cordialement,

CGD

Le client de ligne de commande mysql accepte un flux d'instructions SQL à partir de l'entrée standard. Vous pouvez donc diriger la sortie de mysqldump directement dans mysql sur la ligne de commande. Cette opération en tant que tâche cron remplacera régulièrement vos données de test par des données en direct mises à jour:

mysql --user=username --password=passwd -e 'DROP DATABASE test_db;'
mysql --user=username --password=passwd -e 'CREATE DATABASE test_db;'
mysqldump --user=username --password=passwd live_db | mysql --user=username --password=passwd test_db

Notez que vos données étant volumineuses, cela prendra beaucoup de temps.

72
Michael Berkowski

Michaels answer abowe fonctionne bien mais ne copie pas les événements, les procédures stockées ou les déclencheurs.

Pour copier ces quelques commutateurs supplémentaires est nécessaire pour mysqldump: --events --triggers --routines

Pour compléter une copie déjà faite:

mysqldump --user=username --password=passwd --no-data --no-create-info --no-create-db --events --triggers --routines live_db | mysql --user=username --password=passwd test_db

6
Samuel Åslund

Pour tous les utilisateurs de Mac, avec Sequel Pro, tout ce que vous avez à faire est d'aller dans la base de données (menu) -> Base de données en double. Terminé!

0
Priyank

Le problème avec MySQLdump est que pendant le vidage, la base de données en direct est soit inutilisable, très difficile à utiliser, soit la sauvegarde ne sera pas cohérente. Sauf si vous disposez d'une fenêtre de temps suffisamment large lorsque l'inutilisabilité de la base de données en direct n'est pas importante car la base de données n'a pas besoin d'être utilisée de toute façon (par exemple tard dans la nuit).

Une autre possibilité si vous avez de la place - et, de nos jours, 20 Go n'est pas tant que ça - est celle d'utiliser une base de données auxiliaire.

Vous pouvez installer ne deuxième copie de MySQL Server sur un port différent, et le faire être l'esclave. Ensuite, vous aurez deux bases de données identiques (maître en direct, esclave en direct).

Lorsque vous devez cloner la base de données de test, arrêtez la réplication de l'esclave - l'esclave actif restera désormais "figé" dans le temps - et sauvegardez l'esclave actif dans la base de données de test, en utilisant MySQLbackup ou simplement en copiant les fichiers de données. Une fois terminé, vous redémarrez la réplication.

L'impact sur le maître en direct est négligeable et l'esclave peut en fait être utilisé pour des sélections non critiques pour la mise à jour.

0
LSerni

Si vous préférez MySQL Migration Toolkit, vous pouvez double-cliquer sur le nom du schéma à l'étape Data Mapping et modifier le nom du schéma cible.

0
Vasili