2008-09-02 7 views
6

J'ai une assez petite base de données MySQL (une installation de Textpattern) sur un serveur auquel je n'ai pas accès à SSH (j'ai un accès FTP seulement). J'ai besoin de télécharger régulièrement la base de données en direct sur mon serveur de développement local à la demande; c'est-à-dire que j'aimerais exécuter un script et/ou exécuter un travail cron. Quels sont les bons moyens de le faire?Comment télécharger un db live MySQL dans un db de test local à la demande, sans SSH?

Quelques points à noter:

  • serveur en utilisant Live Linux, Apache 2.2, PHP 5.2 et MySQL 4.1
  • serveur local exécute le même (donc en utilisant PHP est une option), mais le système d'exploitation est de Windows
  • serveur local a Ruby sur elle (donc en utilisant Ruby est une option valide)
  • MySQL en direct db peut accepter les connexions distantes d'adresses IP différentes
  • Je ne peux pas activer la réplication sur le serveur distant

Mise à jour: J'ai accepté la réponse de BlaM; C'est magnifiquement simple. Je ne peux pas croire que je n'y ai pas pensé. Il y avait cependant un problème: je voulais automatiser le processus, mais la solution proposée invite l'utilisateur à entrer un mot de passe. Voici une version légèrement modifiée de la commande mysqldump qui passe le mot de passe:

mysqldump -u USER --password=MYPASSWORD DATABASE_TO_DUMP -h HOST > backup.sql

Répondre

5

Puisque vous pouvez accéder à votre base de données à distance, vous pouvez utiliser mysqldump depuis votre machine Windows pour récupérer la base de données distante. De commandline:

cd "into mysql directory" 
mysqldump -u USERNAME -p -h YOUR_HOST_IP DATABASE_TO_MIRROR >c:\backup\database.sql 

Le programme vous demandera le mot de passe de la base de données, puis générer un fichier c: \ backup \ database.sql que vous pouvez exécuter sur votre machine Windows pour insérer les données.

Avec une petite base de données qui devrait être assez rapide.

1

est réplication MySQL une option? Vous pouvez même l'allumer et l'éteindre si vous ne voulez pas qu'il se reproduise constamment.

Il s'agissait d'un good article lors de la réplication.

0

Je voudrais créer un script (Ruby) pour faire un SELECT * FROM ... sur toutes les bases de données sur le serveur, puis faire un DROP DATABASE ... suivi d'une série de nouveaux INSERT sur la copie locale. Vous pouvez effectuer une requête SHOW DATABASES pour répertorier les bases de données de façon dynamique. Maintenant, cela suppose que la structure de la table ne change pas, mais si vous souhaitez prendre en charge les modifications de table, vous pouvez également ajouter une requête SHOW CREATE TABLE ... et une instruction CREATE TABLE correspondante pour chaque table de chaque base de données. Pour obtenir une liste de toutes les tables dans une base de données, vous effectuez une requête SHOW TABLES. Une fois que vous avez le script, vous pouvez le configurer comme un travail planifié pour l'exécuter aussi souvent que nécessaire.

0

Biek @ Mark

est réplication MySQL une option? Vous pouvez même l'allumer et l'éteindre si vous ne voulez pas qu'il se reproduise constamment.

Merci pour la suggestion, mais je ne peux pas activer la réplication sur le serveur. C'est un serveur partagé avec très peu de marge de manœuvre. J'ai mis à jour la question pour le noter.

0

Selon la fréquence à laquelle vous devez copier des données en direct et la rapidité avec laquelle vous devez le faire, l'installation de phpMyAdmin sur les deux machines peut être une option. Vous pouvez exporter et importer des DB, mais vous devez le faire manuellement. Si c'est un petit DB (et ça sonne comme ça), et que vous n'avez pas besoin de copier des données en direct trop souvent, cela pourrait bien fonctionner pour ce dont vous avez besoin.

2

Voici ce que j'utilise. Cela décharge la base de données du serveur en direct pendant le téléchargement sur le serveur local. mysqldump -hlive_server_addresss -ulive_server_user -plive_server_password --opt --compress live_server_db | mysql -ulocal_server_user -plocal_server_password local_server_db

Vous pouvez l'exécuter à partir d'un fichier bat. Vous pouvez utiliser une tâche planifiée.

Questions connexes