如何在没有密码提示的情况下执行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的选项是区分大小写的!