如何在没有密码提示的情况下执行mysqldump?

我想知道命令执行一个数据库的mysqldump没有提示input密码。

原因:我想要运行一个cron作业,每天一次获取数据库的mysqldump。 因此,提示时我将无法插入密码。

我怎么能解决这个问题?

由于您使用的是Ubuntu,所以您只需要在主目录中添加一个文件,就会禁用mysqldump密码提示。 这是通过创build文件~/.my.cnf (权限需要为600)来完成的。

将其添加到.my.cnf文件中

 [mysqldump] user=mysqluser password=secret 

这使您可以以需要密码的MySQL用户身份进行连接,而无需实际input密码。 你甚至不需要-p或–password。

用于脚本化mysql和mysqldump命令非常方便。

在这个链接中可以find实现这个步骤的步骤。

或者,使用以下命令:

mysqldump -u [用户名] -p [密码] [数据库名称]> [转储文件]

添加到@ Frankline的答案:

必须从命令中排除 -p选项才能在configuration文件中使用密码。

正确:
mysqldump –u my_username my_db > my_db.sql

错误:
mysqldump –u my_username -p my_db > my_db.sql


.my.cnf可以省略用户名。

 [mysqldump] password=my_password 

如果.my.cnf文件不在默认位置,并且mysqldump没有看到,请使用--defaults-file指定。

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

要使用OS内任何位置的文件,请使用

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

如果你像我一样使用CRON,试试这个!

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

build议的权限和所有权

 sudo chmod 600 /media/share/.sqlpwd && sudo chown $USER:nogroup /media/share/.sqlpwd 

.sqlpwd内容

 [mysqldump] user=username password=password 

– 如果你想使用: 这只是login到数据库

 mysql --defaults-extra-file=/media/share/.sqlpwd [database] 

你需要在.sqlpwd里有另一个条目

 [mysql] user=username password=password 

您现在可以创build一个自动连接到数据库的别名

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

– 其他例子传入.cnf或.sqlpwd

 [mysqldiff] user=username password=password [client] user=username password=password 

是啊,这很容易….只是在一个神奇的命令行不再

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

并做了 :)

一些答案提到把密码放在configuration文件中。

或者,从脚本中,您可以export MYSQL_PWD=yourverysecretpassword

这种使用configuration文件的方法的优点是不需要单独的configuration文件来保持与脚本的同步。 你只有脚本来维护。

这种方法没有缺点。

该密码对系统中的其他用户可见(如果它在命令行上,则该密码将可见)。 环境variables只对运行mysql命令的用户和root可见。

任何能够阅读脚本的人都可以看到密码,所以请确保脚本本身受到保护。 这与保护configuration文件没有任何区别。 如果您想让脚本公开可读(例如, export MYSQL_PWD=$(cat /root/mysql_password) ,您仍然可以从单独的文件获取密码。 导出variables比构buildconfiguration文件更容易。

例如,

 $ 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 */; 

对我来说,使用MariaDB我必须这样做:添加文件~/.my.cnf并通过执行chmod 600 ~/.my.cnf ~/.my.cnf更改权限。 然后将您的凭据添加到文件。 我错过的魔法是密码需要在客户端块(ref: docs )下,如下所示:

 [client] password = "my_password" [mysqldump] user = root host = localhost 

如果你碰巧来这里寻找如何与MariaDB做一个mysqldump。 将密码放置在[client]块下,然后将用户置于[mysqldump]块下。

我有以下。

在/ etc / mysqlpwd

 [mysql] user=root password=password 

有以下别名。

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

要进行恢复,我只需使用:

 mysql -p [database] [file.sql] 

当然,我认为把全部cmd行放在根crontab中,用credentails会更好更安全。 至lesscrontab编辑被限制(可读)给已经知道密码的人..所以不用担心以纯文本显示它…

如果需要的不仅仅是一个简单的mysqldump …只需要一个接受credentails作为参数的bash脚本,并执行里面的所有设施…

bas文件很简单

 #!/bin/bash mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql 

在Crontab中:

 0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log 

您可以在命令行上指定密码,如下所示:

 mysqldump -h <host> -u <user> -p<password> dumpfile 

mysqldump的选项是区分大小写的!