Copier tables MySQL vers un autre serveur

Copier tables MySQL vers un autre serveur - PHP - Programmation

Marsh Posté le 09-02-2011 à 14:32:21    

Bonjour à tous,
 
je cherche donc à copier intégralement des tables spécifiques (qui peuvent être très volumineuses) d'une base de donnée vers une autre, celles ci ne se trouvant pas sur le même serveur. J'ai pu trouver comment copier une base de donnée complète d'un serveur à un autre, comment copier une table d'une base à une autre sur le même serveur, mais pas ce que je cherche !
 
Directement en SQL, en PHP ou en linux, je suis preneur :)
 
Merci d'avance ! ;)


---------------
Si ça n'explose pas, vous ne faites pas avancer la science.
Reply

Marsh Posté le 09-02-2011 à 14:32:21   

Reply

Marsh Posté le 09-02-2011 à 14:34:08    

Tu dumpes avec mysqldump, et après tu le recharges sur l'autre serveur. Je suis pas sûr de voir où est le problème :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-02-2011 à 14:41:46    

bah je cherches à faire ça de manière automatisée, à l'aide d'un cron :)
 
Faudrait que les tables sélectionnées soient copiées.


---------------
Si ça n'explose pas, vous ne faites pas avancer la science.
Reply

Marsh Posté le 09-02-2011 à 14:55:35    

Attend mais c'est quoi le but? Parce que c'est bien beau de recopier des tables d'un serveur à l'autre, mais ton cron c'est pour faire quoi?
Tu veux faire des backups? T'essaie de mettre en place un système de miroring/replication du pauvre? Tu peux nous en dire un peu plus sur tes besoins réels?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-02-2011 à 15:09:33    

D'accord :)
 
(suis sage)
 
Donc, je vais avoir besoin d'exploiter les données provenant d'un serveur dans le cadre de statistiques sur un autre serveur, qui contient d'autres données. Ainsi, la décision qui a été prise est de ramener une fois par jour toutes les tables nécessaires du premier serveur où elles sont stockées et mises à jour au fur et à mesure vers le second serveur, où se trouvent les tables nécessaires à la mise en parallèle des données. J'écraserais ainsi toutes les tables déjà présentes.
 
Cependant, je le répète, il s'agit de quelques tables, je ne veux pas créer de miroir de toute la BDD du premier serveur.
 
Voila ;)


---------------
Si ça n'explose pas, vous ne faites pas avancer la science.
Reply

Marsh Posté le 09-02-2011 à 15:19:00    

D'accord je vois.
Donc ce que je ferais moi c'est ceci (S = Serveur Source, avec les tables à exporter, P = Serveur qui fait tourner ton processus de statistiques).
 
- Cron sur S, tu mets le "mysqldump" qui te sort les tables que t'as besoin dans un fichier SQL dans un répertoire bien précis.
- Sur P, tu faits un montage réseau (via NFS, CIFS ou SSHFS, avec une nette préférence pour ce dernier) du répertoire de S dans lequel viennent les dumps.
- Cron sur P, quand tu veux, tu purges les tables à importer, ensuite tu charges le dump SQL qui se trouve dans ton montage réseau via la le bash ..
 
C'est bête et méchant.. Le seul truc c'est que là t'as aucune manière de t'assurer que :
- Les données que tu load sur P n'ont pas été modifiées/compromises, que ce soit sur S ou par une attaque style man-in-the-middle (même si c'est dûr avec SSHFS)
- Que les données que tu charges ne sont pas déjà complètement obsolètes car entre temps de gros insert/delete/update ont été balancés sur S.
 
Il y a toujours la possibilité d’agrafer les 2 bases ensembles par contre là ton réseau risque de prendre cher (et à mon avis les perf vont être nulles)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 15-02-2011 à 13:53:34    

J'ai trouvé une commande qui permette de le faire en une seule étape :  
 
mysqldump --quick --skip-triggers -u$from_user -p$from_password $from_database $tables_list | mysql --host=$to_server -u$to_user -p$to_password -C $to_database
 
En remplaçant les différentes variables par ce qu'il faut, bien sur !
Il faut exécuter la commande sur le serveur où se situent les tables, avec un $from_user qui a le droit d'effectuer un dump.
Il faut s'assurer que le $to_user a le droit d'accéder à MySQL depuis l'extérieur.
 
J'espère que ça pourra en aider certains !
 
Merci à tous !


---------------
Si ça n'explose pas, vous ne faites pas avancer la science.
Reply

Marsh Posté le 15-02-2011 à 13:57:48    

Heu accessoirement ta commande là elle marche pas forcément dans toutes les configuration ... et pis c'est pas une commande, ça en est 2 avec un pipe entre ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 15-02-2011 à 14:01:18    

Au fait, un ETL pourrait pas faire l'affaire?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed