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”没有权限访问你的“失去”数据库?