Comprendre le bitcoin, l'intelligence artificielle, faire un site web... En 3 minutes en vidéo!

Sauvegarder une base de données MySQL sur un serveur distant avec mysqldump et un tunnel SSH

Tutoriaux > PHP / MySQL > Sauvegarder une base de données MySQL sur un serveur distant avec mysqldump et un tunnel SSH

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 :

  • Dans ce tutoriel, la machine sur laquelle se trouve la base à sauvegarder s'appelle machinelocale et celle qui reçoit le dump s'appelle machinedistante
  • La première partie du tutoriel explique pas à pas comment passer par un fichier .SQL, puis l'exporter. Pour les plus chevronnés, la dernière partie montre comment combiner le tout en une seule ligne de commande.


Sauvegarde locale de la base de données

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

Explication de la commande


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

Le transfert du fichier SQL par SSH

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

Explication de la commande


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...Clin d'oeil

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

La restauration sur la nouvelle machine

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 toutSourire

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)


Méthode rapide, sans passer par un dump SQL

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é.

Retour à PHP / MySQL

Ajouter un commentaire

Suite a un fort volume de spam, les commentaires d'invités sont pour le moment désactivés. Vous devez vous inscrire ou vous identifier pour pouvoir commenter cet article, ou demander du support.

Lectures recommandées

Commentaires sur cet article

cedric_zic - Le 18 Octobre 2015 à 09h40

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