2010-12-10 39 views
1

J'ai 2 serveurs. L'accès à la base de données distante # 1 est désactivé. La base de données est énorme (~ 1Go) donc il n'est pas possible de la vider avec phpMyAdmin car elle plante et bloque la connexion. Je n'ai pas d'accès SSH. J'ai besoin de copier la base de données entière à # 2 (où je peux configurer pratiquement tout).Copie d'une base de données MySQL via HTTP

Mon idée est d'utiliser une sorte de couche d'accès HTTP sur # 1. Par exemple, un script PHP simple qui accepte la requête en argument _GET/_POST et renvoie le résultat en tant que corps HTTP. Sur le n ° 2 (ou mon bureau), je pourrais mettre en place une sorte d'application serveur qui demanderait séquentiellement pour chaque ligne de chaque table, même une à la fois.

Et ma question est: connaissez-vous une application prête à l'emploi avec un tel flux?

BTW: # 1 est PHP seulement, # 2 peut être PHP, Python, etc

Je ne peux pas courir quoi que ce soit sur # 1, tous les fopen, curl, prises, etc système sont désactivées. Je ne peux accéder à DB qu'à partir de PHP, pas de connexions à distance autorisées

+0

Est-ce que votre MySQL est public ou accessible de n'importe quelle façon à distance? – TheLQ

+1

get ssh, http n'est pas conçu pour cela et vous devrez coder beaucoup de contrôle là-dessus là où existent des protocoles existants (avoir rsync ou openvpn peut vous aider sans un accès SSH complet). Aussi, vous pouvez essayer serverfault. – Unreason

+1

alors que cela en fait une question intéressante, je dois vous demander pourquoi vous ne demandez pas simplement à votre administrateur système de migrer les données pour vous? essayez-vous de recueillir des données à partir d'une source à laquelle vous n'êtes pas censé accéder en premier lieu? – Will

Répondre

0

il y a longtemps je Sypex Dumper pour cela, juste à gauche navigateur ouvert pour la nuit et le lendemain matin whle décharge db est disponible sur ftp

0

On ne sait pas ce qui est disponible sur le serveur n ° 1.

En supposant que vous pouvez exécuter seulement vous php peut encore être en mesure de

  • run scp from php et se connecter au serveur # 2, envoyer des fichiers comme

  • peut-être vous pouvez utiliser PHP pour exécuter des commandes locales sur le serveur n ° 1? dans ce cas, quelque chose comme la course rsync through php du serveur # 1 peut travailler

+0

Je ne peux rien faire sur # 1, tous les fopen, curl, sockets, system etc sont désactivés. Je ne peux accéder à DB qu'à partir de PHP, aucune connexion à distance n'est autorisée. – Coder

0

Il me semble que vous devez contacter le propriétaire de l'hôte et demandez si vous pouvez obtenir vos données sur une certaine façon. C'est un peu trop stupide que vous devriez streamer toute votre base de données et le réinsérer sur la nouvelle machine. Il va manger beaucoup de ressources sur le serveur php dont vous obtenez les données. (Et si le fournisseur d'hébergement est déjà restrictif, vous pouvez également avoir une limite à la quantité d'opérations sql que vous êtes autorisé dans un laps de temps)

Bien que si vous êtes obligé de le faire, vous pouvez faire un select * à partir de la table et pour chaque ligne le convertir en un objet json que vous répercutez sur la ligne. Cela vous pouvez stocker sur le disque de votre côté et utiliser pour l'insérer par la suite.

+0

fonctionnerait, mais terriblement lent/douloureux. acceptez que contacter l'administrateur serait le meilleur moyen d'obtenir les données. – Will

+0

Le fournisseur d'hébergement est totalement indisponible - il ne répond pas aux messages, mails, appels téléphoniques pendant plus de trois ans. Cependant, le serveur et le domaine continuent de fonctionner, plutôt génial. Et je pense que c'est la seule option - je demande seulement s'il y a un logiciel que je peux utiliser avant de commencer à écrire le mien. – Coder

0

Je suppose que vous pouvez accéder aux deux serveurs via FTP.

Comment obtenez-vous vos fichiers php autrement.

Peut-être que vous pouvez simplement copier la base de données mysql si vous pouvez y accéder via FTP.

Fonctionne pas dans tous les cas, consultez: http://dev.mysql.com/doc/refman/5.0/en/copying-databases.html pour plus d'informations.

Ou vous pouvez essayer les options disponibles sur ce lien:

http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to-backup-mysql-databases.aspx

Ne pas maintenant comment votre php est configuré bien que je puisse l'imaginer peut prendre un certain temps pour traiter la base de données.

temps d'exécution max réglage etc.

0

Il y a l'option de réplication, si au moins l'un des hôtes est accessible à distance via TCP. Il serait lent de synchroniser une DB vierge de cette façon, mais cela aurait l'avantage de préserver toutes les métadonnées de la table que vous perdriez en faisant des séquences select/insert. Plus de détails ici: http://dev.mysql.com/doc/refman/5.0/en/replication.html

1

Pouvez-vous vous connecter à un serveur MySQL distant depuis PHP sur le serveur n ° 1?

Je sais que vous avez dit "aucune connexion à distance autorisée", mais vous n'avez pas spécifiquement mentionné ce scénario.

Si cela est possible, vous pouvez SELECT depuis votre ancienne base de données et directement INSERT vers MySQL sur le serveur n ° 2.

0

Je ne sais pas comment vous avez réussi à entrer dans cette situation. Le fournisseur d'hébergement est clairement déraisonnable, et vous devriez les contacter. Vous devriez également cesser d'utiliser leurs services dès que possible (bien que cela ressemble à ce que vous essayez de faire de toute façon). Malheureusement, PHPMyAdmin n'est pas adapté aux opérations de base de données critiques pour les données, car elles comportent trop de bogues et de limitations. Vous ne devriez certainement pas vous en servir pour vider ou restaurer. Mysqldump est le seul moyen de décharger FIABLEMENT une base de données et de la ramener et d'avoir une bonne chance que les données soient complètes et correctes. Si vous ne pouvez pas l'exécuter (localement ou à distance), je crains que tous les paris soient désactivés.