267 votes

Comment effectuer un mysqldump sans demande de mot de passe?

Je voudrais connaître la commande pour effectuer un mysqldump d'une base de données sans demander le mot de passe.

MOTIF : Je voudrais exécuter une tâche cron, qui effectue un mysqldump de la base de données une fois par jour. Par conséquent, je ne pourrai pas insérer le mot de passe lorsqu'on me le demandera.

Comment pourrais-je résoudre ce problème ?

471voto

Frankline Points 8947

Étant donné que vous utilisez Ubuntu, tout ce que vous avez à faire est d'ajouter un fichier dans votre répertoire personnel et cela désactivera la demande de mot de passe mysqldump. Cela se fait en créant le fichier ~/.my.cnf (les autorisations doivent être 600).

Ajoutez ceci au fichier .my.cnf

[mysqldump]
user=mysqluser
password=secret

Cela vous permet de vous connecter en tant qu'utilisateur MySQL qui nécessite un mot de passe sans avoir à entrer réellement le mot de passe. Vous n'avez même pas besoin de -p ou --password.

Très pratique pour les commandes de script mysql & mysqldump.

Les étapes pour réaliser cela peuvent être trouvées dans ce lien.

Alternativement, vous pourriez utiliser la commande suivante :

mysqldump -u [nom d'utilisateur] -p[mot de passe] [nom de la base de données] > [fichier de sauvegarde]

mais sachez que c'est intrinsèquement non sécurisé, car toute la commande (y compris le mot de passe) peut être vue par tout autre utilisateur sur le système pendant que la sauvegarde est en cours, avec une simple commande ps ax.

57 votes

Downvoté les autres réponses passant -p en ligne de commande, car tout utilisateur peut exécuter ps aux pour voir le mot de passe root ou de l'utilisateur. Utiliser le fichier suggéré ci-dessus est le plus sécurisé

1 votes

Réponse fantastique! Je cherchais un moyen de ne pas laisser mon mot de passe simplement assis dans mon script, et cela fait l'affaire :) +1 pour la sécurité!

2 votes

Est-il complètement sûr de placer le mot de passe root en clair dans le fichier my.cnf? De plus... Cela donnera la permission à chaque utilisateur sur le serveur d'exécuter une sauvegarde sans mot de passe... par exemple l'utilisateur apache aussi (par ex. www-data) cela signifie que si quelqu'un trouve une faille pour exécuter des commandes sur votre machine, il pourra librement effectuer une sauvegarde et lire toutes vos données, en raison de l'autorisation root?

98voto

Nelu Malancea Points 388

Ajout à la réponse de @Frankline :

L'option -p doit être exclue de la commande pour utiliser le mot de passe dans le fichier de configuration.

Correct :
mysqldump –u my_username my_db > my_db.sql

Faux :
mysqldump –u my_username -p my_db > my_db.sql


.my.cnf peut omettre le nom d'utilisateur.

[mysqldump]
password=my_password

Si votre fichier .my.cnf n'est pas dans un emplacement par défaut et que mysqldump ne le voit pas, spécifiez-le en utilisant --defaults-file.

mysqldump --defaults-file=/chemin-vers-le-fichier/.my.cnf –u my_username my_db > my_db.sql

0 votes

Saperlipopette, de nombreux tutoriels XAMPP incluent le -p sans l'expliquer. Cela ne fonctionne PAS pour contourner un mot de passe vide...

34voto

Tàrek Kala'ajy Points 55

Oui c'est très facile .... juste dans une seule ligne de commande magique pas plus

mysqldump --user='monnomdutilisateur' --password='monmotdepasse' -h MonUrlOuAdresseIP nomdelabase > myfile.sql

et voilà :)

36 votes

Attention: Utiliser un mot de passe sur l'interface de ligne de commande peut être insecure.

7 votes

@Yottatron Il peut être dangereux, surtout à l'époque où les anciens systèmes Unix avaient facilement 10 à 15 personnes connectées la plupart de la journée et vi était surchargé. Sur un VPS moderne, bien que vous puissiez avoir 10 à 15 personnes connectées en shell et utilisant IRC, il est courant que seuls les administrateurs aient accès au shell.

5 votes

Merci pour cela, je l'utilise simplement dans un Docker devbox. Donc la sécurité n'est pas un problème.

-8voto

Sunil Kumar B M Points 1441

Si vous connaissez le mot de passe, écrivez la commande comme ceci

Par exemple : si le nom d'utilisateur est root et le mot de passe est root

mysqldump -uroot -proot  > dbdump

Notez l'option -p sans espace

-12voto

kante Points 145

Sûrement je pense qu'il serait préférable et plus sûr de placer la ligne de commande complète dans le crontab racine, avec les identifiants. Au moins, la modification du crontab est restreinte (lisible) à quelqu'un qui connaît déjà le mot de passe... donc pas de soucis à le montrer en texte clair...

Si plus qu'un simple mysqldump est nécessaire... il suffit de placer un script bash qui accepte les identifiants en tant que paramètres et exécute toutes les commodités à l'intérieur...

Le fichier basique en simple

#!/bin/bash
mysqldump -u$1 -p$2 votrenombase > /votre/chemin/sauver.sql

Dans le Crontab:

0 0 * * * bash /chemin/vers/le/fichier/bash/ci-dessus.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log

4 votes

Non, ce ne serait pas plus sûr, lorsque vous ajoutez un mot de passe à la ligne de commande, il est visible pour quiconque a la capacité de lire le processus (ou de faire un ps complet) - ce qui est assez standard. Lorsque vous ajoutez un fichier .my.cnf et définissez des droits 600, il est visible uniquement pour VOUS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X