web-dev-qa-db-fra.com

Comment effectuer un mysqldump sans invite de mot de passe?

Je voudrais savoir la commande pour effectuer un mysqldump d'une base de données sans l'invite pour le mot de passe.

RAISON: Je voudrais exécuter un travail cron, qui prend 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 lorsque vous y serez invité.

Comment pourrais-je résoudre ceci?

168
Prakash Raman

Puisque vous utilisez Ubuntu, tout ce que vous avez à faire est simplement d’ajouter un fichier dans votre répertoire personnel et cela désactivera l’invite de mot de passe mysqldump. Ceci est fait en créant le fichier ~/.my.cnf (les autorisations doivent être de 600).

Ajoutez ceci au fichier .my.cnf

[mysqldump]
user=mysqluser
password=secret

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

Très pratique pour le script des commandes mysql & mysqldump.

Les étapes pour y parvenir se trouvent dans ce lien .

Vous pouvez également utiliser la commande suivante:

mysqldump -u [user name] -p[password] [database name] > [dump file]

mais sachez qu’elle est intrinsèquement peu sûre, car la commande entière (y compris le mot de passe) peut être visualisée par tout autre utilisateur du système pendant le dump, à l’aide d’une simple commande ps ax.

327
Frankline

Ajout à la réponse de @ Frankline:

L'option -pdoit être exclue de la commande pour pouvoir utiliser le mot de passe du 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 ne se trouve pas dans un emplacement par défaut et mysqldump ne le voit pas, spécifiez-le à l'aide de --defaults-file

mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql

70
Nelu

Pour utiliser un fichier qui se trouve n'importe où dans le système d'exploitation, utilisez --defaults-extra-file, par exemple: 

mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql

Remarque: .sqlpwd est juste un exemple de nom de fichier. Vous pouvez utiliser ce que vous désirez.

Remarque: MySQL recherchera automatiquement ~/.my.cnf qui peut être utilisé à la place de --defaults-extra-file

Si vous utilisez CRON comme moi, essayez ceci!

mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"

Permission requise et propriété recommandée 

Sudo chmod 600 /path/.sqlpwd && Sudo chown $USER:nogroup /path/.sqlpwd

.sqlpwd contenu:

[mysqldump]
user=username
password=password

Autres exemples à transmettre .cnf ou .sqlpwd

[mysql]
user=username
password=password

[mysqldiff]
user=username
password=password

[client]
user=username
password=password

Si vous souhaitez vous connecter automatiquement à une base de données, vous aurez besoin de l'entrée [mysql] par exemple.

Vous pouvez maintenant créer un alias qui vous connecte automatiquement à la base de données.

alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"

Vous pouvez également uniquement insérer le mot de passe dans .sqlpwd et transmettre le nom d'utilisateur via le script/cli. Je ne sais pas si cela améliorerait la sécurité ou non, ce serait une question différente dans son ensemble.

Par souci d'exhaustivité, je dirai que vous pouvez effectuer les opérations suivantes, mais est extrêmement précaire et ne doit jamais être utilisé dans un environnement de production:

mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql

Remarque: Il n'y a PAS D'ESPACE entre -p et le mot de passe. 

Par exemple, -pPassWord est correct alors que -p Password est incorrect.

35

Quelques réponses mentionnent la mise en place du mot de passe dans un fichier de configuration.

Sinon, à partir de votre script, vous pouvez export MYSQL_PWD=yourverysecretpassword.

L'avantage de cette méthode par rapport à l'utilisation d'un fichier de configuration est que vous n'avez pas besoin d'un fichier de configuration séparé pour rester synchronisé avec votre script. Vous n'avez que le script à gérer.

Il n'y a pas d'inconvénient à cette méthode.

Le mot de passe est non visible par les autres utilisateurs du système (il serait visible s'il se trouvait sur la ligne de commande). Les variables d'environnement ne sont visibles que par l'utilisateur exécutant la commande mysql et root.

Le mot de passe sera également visible par toute personne pouvant lire le script lui-même. Assurez-vous donc que le script lui-même est protégé. Ce n'est pas différent de la protection d'un fichier de configuration. Vous pouvez toujours obtenir le mot de passe à partir d'un fichier séparé si vous souhaitez que le script soit lisible par le public (export MYSQL_PWD=$(cat /root/mysql_password) par exemple). Il est encore plus facile d'exporter une variable que de construire un fichier de configuration.

Par exemple.,

$ export MYSQL_PWD=xoF3mafn5Batxasdfuo
$ mysqldump -u root mysql | head
-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
30
chutz

Oui, c’est très facile…. Juste en une ligne de commande magique pas plus 

mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql

et fait :)

22
Tarek Kalaji

Pour moi, en utilisant MariaDB, je devais faire ceci: Ajouter le fichier ~/.my.cnf et modifier les autorisations en faisant chmod 600 ~/.my.cnf. Ajoutez ensuite vos informations d'identification au fichier. La pièce magique qui me manquait était que le mot de passe devait se trouver sous le bloc client (ref: docs ), comme suit:

[client]
password = "my_password"

[mysqldump]
user = root
Host = localhost

Si vous venez ici chercher comment faire un mysqldump avec MariaDB. Placez le mot de passe sous un bloc [client], puis l'utilisateur sous un bloc [mysqldump].

4
Michael Johansen

Voici une solution pour Docker dans un script/bin/sh:

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]" > /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user=root" >> /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "password=$MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file=/root/mysql-credentials.cnf --all-databases'

Remplacez [MYSQL_CONTAINER_NAME] et assurez-vous que la variable d'environnement MYSQL_ROOT_PASSWORD est définie dans votre conteneur.

J'espère que cela vous aidera comme cela pourrait m'aider!

1
pcmanprogrammeur

que diriez-vous --password = "" a fonctionné pour moi fonctionnant sous 5.1.51

mysqldump -h localhost -u <user> --password="<password>"
0
Joe Velez

J'ai le suivant.

/ etc/mysqlpwd

[mysql]
user=root
password=password

Avec l'alias suivant.

alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd'

Pour effectuer une restauration, j'utilise simplement:

mysql -p [database] [file.sql]
0
hawx