mysqldump –password是否真的做到了这一点?
我试图使用mysqldump
来转储一个模式,它大部分工作,但我碰到一个好奇心-p
或--password
选项似乎是做一些事情之外的设置密码( man
页和--help
输出说应该)。
具体来说,它看起来像这里所做的: http : //snippets.dzone.com/posts/show/360 – 即设置数据库转储。
为了支持我有点古怪的说法,我可以告诉你,如果我没有指定--password
(或-p
)选项,那么这个命令会打印使用语句并退出并显示一个错误。 如果我指定了它,系统会立即提示input密码(!),然后转储在--password
选项中指定的数据库(或者在通常情况下给出的错误是密码不匹配任何数据库名称指定)。
这是一个成绩单:
$ mysqldump -utesting-h myhost - 无数据--tables - 密码丢失 input密码: - MySQL转储10.10 mysqldump:有错误:1044:访问拒绝用户'testing'@'%'到 数据库在select数据库时会“丢失”
那么,是什么给了? 这是这样的工作方式吗? 这肯定不会有意义,也不符合官方文件。 最后,如果这只是它的工作方式,我该如何指定在自动化作业中使用的密码? 使用expect
?
我使用的是mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486)
。
从男人mysqldump:
– 密码[=密码],-p [密码]
连接到服务器时使用的密码。 如果使用短选项表单(-p),则选项和密码之间不能有空格。 如果您在命令行上的–password或-p选项之后省略了密码值,系统会提示您input密码值。
在命令行上指定密码应被视为不安全。 请参见第6.6节“确保您的密码安全”。
在语法上,您没有正确使用–password开关。 因此,命令行parsing器将“丢失”用作独立参数,而mysqldump将其解释为数据库名称,就像您试图使用mysqldump lose
这样的简单命令一样
要解决此问题,请尝试使用--password=lose
或-plose
或仅使用-p
或--password
并在提示时键入密码。
另一种select是创build文件〜/ .my.cnf (权限需要为600)。
将其添加到.my.cnf文件中
[client] password=lose
这使您可以以需要密码的MySQL用户身份进行连接,而无需实际input密码。 你甚至不需要-p或–password。
用于脚本化mysql和mysqldump命令非常方便。
我发现如果你的密码有特殊字符,就会发生这种情况。 这里的mysql密码有一个! 在它,所以我必须做== =密码='xxx!xxxx'为它正确工作。 注意'标记。
尝试在中间放置一个“=” – 密码input如下:
--password=lose
如果使用-p,则-p和密码之间不能有空格,即“-plose”。
你有没有尝试 – 密码=无论密码是?
也许我错过了这个问题,但是这就是我所做的工具。
我不确定它是否适用于–password版本,但是如果您使用-p,则可以在之后立即指定密码(密钥不包括空格):
mysqldump -pmypassword …
如果使用不带参数的-p或–password,则会收到提示,要求input密码。
如果要在命令行上指示密码,则必须使用-pYOURPASSWORD或–password = YOURPASSWORD。 请注意,-p后面没有空格,并且–password后面有一个“=”符号。
在你的例子中,mysqldump要求input密码,然后把“lost”当作数据库名称。 如果那是你的密码,你应该包含一个“=”
-p选项不需要参数。 您只需将-p或–password指示您将要使用密码来访问数据库。 转储命名数据库的原因是-p后面的任何内容都是mysqldump的最后一个参数应该是要转储的数据库的名称(或者–all-databases,如果您希望它们全部转换的话)。
纳森的回答也是如此。 您可以在-p开关后立即指定密码(在脚本中很有用,在执行该命令后无法手动input)。
–password [=密码]
这里是文档
也许你的用户“testing”没有权限访问你的“失去”数据库?