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?
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
.
Ajout à la réponse de @ Frankline:
L'option -p
doit ê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
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.
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 */;
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 :)
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].
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!
que diriez-vous --password = "" a fonctionné pour moi fonctionnant sous 5.1.51
mysqldump -h localhost -u <user> --password="<password>"
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]