我想知道命令执行一个数据库的mysqldump没有提示输入密码。如何在没有密码提示的情况下执行mysqldump?
原因: 我想运行一个cron作业,每天处理一次数据库的mysqldump。因此,出现提示时我将无法插入密码。
我该如何解决这个问题?
我想知道命令执行一个数据库的mysqldump没有提示输入密码。如何在没有密码提示的情况下执行mysqldump?
原因: 我想运行一个cron作业,每天处理一次数据库的mysqldump。因此,出现提示时我将无法插入密码。
我该如何解决这个问题?
由于您使用的是Ubuntu,因此您只需要在主目录中添加一个文件,它将禁用mysqldump密码提示。这是通过创建文件~/.my.cnf
(权限需要为600)来完成的。
而不必实际输入密码本到.my.cnf文件
[mysqldump]
user=mysqluser
password=secret
这可让您连接为谁需要密码的MySQL用户添加。你甚至不需要-p或--password。
对于脚本编写非常方便mysql & mysqldump命令。
实现此目的的步骤可以在this link中找到。
或者,使用下面的命令:
的mysqldump -u [用户名] -p [密码] [数据库名称]> [转储文件]
你可以在命令行上指定密码的方法如下:
mysqldump -h <host> -u <user> -p<password> dumpfile
的mysqldump的选项是大小写敏感的!
都能跟得上它不工作,我不认为它知道-p是密码 – 2012-02-15 12:31:45
不知道如何得到1票,我我们对此表示赞同。正如在这里的其他答案中所看到的,-p和给定密码之间不应有空格。你也应该将输出重定向到dumpfile,而不是像你在做的那样指定它,或者它会被假定为一个表名。 @buzypi说得最好。 – Neek 2012-10-03 03:45:49
它应该工作(虽然是不安全的,因为它很容易让其他用户看到密码),您只需确保-p和密码之间没有空格,例如'mysqldump -u root -pmypassword' – jx12345 2016-11-20 14:16:53
当然我认为这将是更好和更安全地将全部cmd行放在根crontab中,并带有credentails。 至少crontab编辑被限制(可读)给已经知道密码的人..所以不用担心以纯文本显示它...
如果需要的不仅仅是一个简单的mysqldump ...只需放置一个bash脚本接受credentails作为PARAMS和执行里面的所有设施......
简单
#!/bin/bash
mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql
目前的crontab文件BAS:
0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log
不,它不会是安全的。 ,当你向命令行添加密码时,任何能够读取proc(或者完成ps)的人都可以看到 - 这是相当默认的。 当您添加.my.cnf文件并设置了600个权限时,它仅对您可见。 – rombarcz 2014-06-17 09:36:02
添加到@ Frankline的回答:
-p
选项必须从命令中排除以便在配置文件中使用密码。
正确:
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
文件不在default location和mysqldump
没有看到它,使用--defaults-file
指定它。
mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql
呀这是很容易....只是在一个神奇的命令行没有更多
mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql
,做:)
警告:在命令行界面上使用密码可能不安全。 – 2015-06-30 11:51:38
@Yottatron它可能是不安全的,特别是在古代Unix系统很容易有10-15人在一天中的大部分时间登录并且vi陷入困境的时候。在现代VPS上,虽然可以有10-15个人使用IRC,但只有管理员才能访问shell。 – JonathanHayward 2017-04-05 13:37:31
感谢你们,我只是在Docker devbox中使用它。所以安全不是问题。 – MikeiLL 2017-09-04 17:48:51
要使用一个文件,该文件是在任何地方OS内部,使用
mysqldump --defaults-extra-file=/media/share/.sqlpwd [database] > [desiredoutput].sql
如果你使用像我这样的CRON,试试这个!
mysqldump --defaults-extra-file=/media/share/.sqlpwd [database] > "$(date '+%F').sql"
Reccomended权限和所有权
sudo chmod 600 /media/share/.sqlpwd && sudo chown $USER:nogroup /media/share/.sqlpwd
.sqlpwd内容
[mysqldump]
user=username
password=password
- - 如果你想使用:这只是登录到数据库
mysql --defaults-extra-file=/media/share/.sqlpwd [database]
你需要有另一个入口内.sqlpwd
[mysql]
user=username
password=password
您现在能有这样的自动连接的别名,你到DB
alias whateveryouwant="mysql --defaults-extra-file=/media/share/.sqlpwd [database]"
- 其他例子.CNF通过或.sqlpwd
[mysqldiff]
user=username
password=password
[client]
user=username
password=password
--defaults-extra-file可以在默认位置使用,甚至可以通过--defaults-extra-file =〜/ .my.cnf – FreeSoftwareServers 2015-09-05 04:32:07
这是最好的答案,尤其是在考虑多个数据库和用户/密码时。 – Hazok 2015-10-27 09:41:50
*我认为*您也可以在文件中只输入密码并在CLI中传递用户名,这对安全性更好,因为它将用户名/密码从相同文件中分离出来。 – FreeSoftwareServers 2015-12-15 05:23:15
一些答案提到将密码放在配置文件中。
另外,从您的脚本,你可以export MYSQL_PWD=yourverysecretpassword
。
此方法优于使用配置文件的优点是您不需要单独的配置文件就可以与脚本保持同步。你只有脚本来维护。
这种方法没有缺点。
密码是而不是对系统上的其他用户可见(如果它位于命令行上,则可见)。环境变量只对运行mysql命令的用户和root可见。
对于任何可以阅读脚本本身的人来说,密码也是可见的,因此请确保脚本本身受到保护。这与保护配置文件没有任何区别。如果您想让脚本公开可读(例如,export MYSQL_PWD=$(cat /root/mysql_password)
),您仍然可以从单独的文件获取密码。导出变量比构建配置文件更容易。
例如,
$ 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 @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
对我来说,使用MariaDB的我不得不这样做:做chmod 600 ~/.my.cnf
添加文件~/.my.cnf
和更改权限。然后将您的凭据添加到该文件。神奇的一块,我缺少的是,该密码需要客户端块(参考:docs)下,像这样:
[client]
password = "my_password"
[mysqldump]
user = root
host = localhost
如果你碰巧来这里寻找如何做一个mysqldump的使用MariaDB的。将密码放置在[client]块下,然后将用户置于[mysqldump]块下。
我有以下。
的/ etc/mysqlpwd
[mysql]
user=root
password=password
用下面的别名。
alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd'
要进行恢复,我只是用:
mysql -p [database] [file.sql]
谢谢!工作很好! – 2012-02-15 12:34:06
downvoted其他答案在命令行上传递-p,因为任何用户都可以通过ps aux查看root或用户的密码。使用上面的文件建议是最安全的 – Eddie 2013-04-26 18:55:52
梦幻般的答案!我正在寻找一种方法,不要让我的密码就在我的脚本中,而且这个技巧的确有用。 – srchulo 2013-05-21 21:01:56