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--optdatabase1|mysql-uuser2-hhost2-Cdatabase2-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;
- Le nom ou l'adresse IP de votre serveur
- --opt
- Cette argument est un argument utilisé avec
mysqldumpet qui permet d'optimiser la requête surdatabase1. 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 mySQLhost1avec les identifiant/mot de passeuser1/mdp1et sauvegarder la base de donnéedatabase1. Envoyer le résultat vers la base de donnéedatabase2sur serveur mySQLhost2avec les identifiant/mot de passeuser2/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 :
- Que les bases de données
database1etdatabase2existent... - Et que le
user2est les permissions suffisantes pour créer des tables dansdatabase2
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