transfert de données entre 2 serveurs mySQL

mysql et mysqldump

L'autre jour on m'a demandé comment transférer une base de donnée Mysql d'un serveur MySQL à un autre. Si la méthode la plus intuitive et de penser à un utilitaire ( ex: phpMyAdmin ou que sais-je...) la méthode la plus simple et la plus directe est la ligne de commande et pour cela il faut avoir recours à 2 commandes mysql et mysqldump.

L'avantage de ces commandes et qu'elles sont présentes à l'installation de mySQL sur votre OS de choix et que vous n'avez rien à configurer. Mais sans plus attendre voici la ligne de commande à taper :

mysqldump -uuser1 -hhost1 -pmdp1 --opt database1 | mysql -uuser2 -hhost2 -C database2 -p 

Je sais cette ligne de commande peut paraître longue mais tellement simple à comprendre que sa longeur... vous l'oublierez rapidement ;)

Quelques explications

Nous avons donc eu recours aux commandes mysql et mysqldump. En examinant de plus près la ligne de commande vous verrez que les arguments utilisés sont identiques. La diférence entre les 2 commandes et que mysqldump permet de sauvegarder une base de données et mysql de se connecter à une base de données. Mais examinons ces arguments en détails:

-h, -u, -p
Lorsque l'on se connecte sur un serveur de base de donnée ont demande un certains nombre d'informations :
  • Le nom ou l'adresse IP de votre serveur -h ;
  • Un nom d'utilisateur c'est le rôle de l'argument -u ;
  • Et enfin un mot de passe c'est le rôle de l'argument -p ;
--opt
Cette argument est un argument utilisé avec mysqldump et qui permet d'optimiser la requête sur database1. Cette argument est devenu optionnel dans les versions récentes de mySQL. ( > mySQL 4.1.X ).
-C
Cette argument permet de compresser les données entre les différents serveurs et permet de diminuer la taille des donné échangées.

En résumé nous pourrions traduire la phrase ci-dessus comme suit:

Connectez-vous au serveur mySQL host1 avec les identifiant/mot de passe user1/mdp1 et sauvegarder la base de donnée database1. Envoyer le résultat vers la base de donnée database2 sur serveur mySQL host2 avec les identifiant/mot de passe user2/mdp2.

Je terminerais par là où j'aurais du commencer pour que cette ligne de commande fonctionne il faut bien sûr 2 pré-requis importants :

  1. Que les bases de données database1 et database2 existent...
  2. Et que le user2 est les permissions suffisantes pour créer des tables dans database2

Noter également que je fournis en clair le mot de passe à mysqldump mais pas à mysql ainsi à l'éxécution de la ligne de commande on demandera le mot de passe vers host2