Tutoriaux > PHP / MySQL > Sauvegarder une base de données MySQL sur un serveur distant avec mysqldump et un tunnel SSH
Comment faire une sauvegarde (dump) d'une base mysql sur un serveur distant, en utilisant mysqldump et en passant par un tunnel SSH, via la commande de copie de fichiers sécurisée "scp".
Citation
Informations :
Nous allons commencer par faire un dump (une sauvegarde) localement, sur le serveur qui contient la base de données à sauvegarder.
Les commandes doivent se fait en mode root. Ainsi, utilisez la commande mysqldump comme suit pour générer une sauvegarde dans un fichier .sql de la base concernée . (Ici, on sauvegardera dans le fichier /home/sql/aido_base.sql)
[[email protected] /] mysqldump aido_base -uuser -ppassword > /home/sql/aido_base.sql
Dans cette commande, on crée un dump local sur le serveur qui contient la base que l'on veut sauvegarder.
Il vous faut remplacer user et password par les identifiants de votre base. Attention, il ne faut pas mettre d'espace entre le -u et le nom d'utilisateur, et de même pour le -p et le mot de passe !
Une fois le prompt revenu, le fichier a été créé. Vous pouvez le constater en tapant :
[[email protected] /home/sql] ls -hl
total 403M
-rw-r--r-- 1 root root 402M avr 25 17:59 aido_base.sql
Il va maintenant falloir envoyer ce dump sur le serveur distant. Une simple utilisation de scp le permet, comme suit (vous devez avoir un serveur ssh installé sur la machine distante, et avoir les accès nécessaires, le firewall ouvert, etc).
[[email protected] /] scp /home/sql/aido_base.sql [email protected]_distante:/home/sauvegarde/aido_base.sql
On est ici en train de dupliquer aido_base.sql sur la machine distante. Il faut bien entendu remplacer user et ip_distante par votre nom d'utilisateur sur la machine et l'IP de cette machine. Le mot de passe vous sera demandé lors de la validation de la commande.
On copie ici vers dossier /home/sauvegarde sur la nouvelle machine. Et on laisse tourner...
aido_base.sql 24% 108MB 1.8MB/s 12:46 ETA
La sauvegarde est terminée lorsque le prompt est revenu. On peut aller voir le résultat sur la machine distante, comme on a fait tout à l'heure avec la machine locale :
[[email protected] /home/sauvegarde] ls -hl
total 403M
-rw-r--r-- 1 root root 402M avr 25 18:22 aido_base.sql
Il ne nous reste plus qu'à restaurer le dump tout fraîchement arrivé sur la machine distante. Pour cela, encore une utilisation de mysqldump, simplement utilisé dans l'autre sens :
[[email protected] /home/sauvegarde] mysql -uuser -ppassword aido_base < /home/sauvegarde/aido_base.sql
Encore une fois, il vous faut changer le nom d'utilisateur et password, et il vous faut avoir créé la base "d'accueil" avant de commencer le transfert !
Voilà, c'est un peu fastidieux, il existe une technique un peu plus rapide en passant directement par SSH, mais celle la fonctionne et en plus on a un beau .SQL au cas où on casserait tout
Voila le résultat (partiel) de mysql > show tables;, dans la base aido_base :
mysql> use aido_base
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------------------+
| Tables_in_aido_base |
+-----------------------------+
| forum_acl_groups |
| forum_acl_options |
| forum_acl_roles |
| forum_acl_roles_data |
| forum_acl_users |
| forum_attachments |
| forum_banlist |
| forum_bbcodes |
| forum_bookmarks |
| forum_bots |
| forum_config |
| forum_confirm |
+-----------------------------+
12 rows in set (0.01 sec)
Pour les confirmés de ssh et mysql, vous pouvez refaire ce tutoriel en une seule ligne, combinant les deux commandes :
mysqldump -uuser -ppassword aido_base | ssh user:[email protected]_distante "mysql aido_base"
Pour créer un fichier .sql à partir d'une base en une seule ligne :
Pouzy:~ ssh ip_distante "mysqldump aido_base -uuser -ppassword" > /home/aido_base.sql
Par Pouzy
, Le 25 Avril 2010 à 18h44
Ce tutoriel est la propriété d'Aidoweb et ne peut en aucun cas être copié.
Bonjour,
ayant un problème de place sur mon serveur actuel, je cherchais comment faire pour créer le dump directement sur le serveur distant.
Votre solution était donc mon sésame.
Une petite remarque cependant concernant la commande en une ligne; elle implique que le serveur mysql distant accepte les connexions root sans mot de passe.
j'ai donc dû adapter la commande de la manière suivante:
mysqldump -u<USER_LOCAL> -p<PASSWORD_LOCAL> <BASE_LOCALE> | ssh <USER_DISTANT>@<IP_DISTANT> "mysql -u<USER_DISTANT> -p<PASSWORD_DISTANT> <BASE_DISTANTE>"
cordialement.
Tutoriaux > PHP / MySQL > Sauvegarder une base de données MySQL sur un serveur distant avec mysqldump et un tunnel SSH