mysqldump --password是否真的按照它说的做?

时间:2020-03-06 14:52:38  来源:igfitidea点击:

我正在尝试使用mysqldump来转储模式,并且大多数情况下都能正常工作,但是我遇到了一个好奇:-p或者--password选项似乎除了设置密码之外还做其他事情(因为在man页面和--help输出中说应该)。

具体来说,它看起来像在执行此处指示的操作:http://snippets.dzone.com/posts/show/360,即将数据库设置为转储。

为了支持我有些古怪的说法,我可以告诉你,如果我不指定--password(或者-p)选项,该命令将打印用法说明并退出并出现错误。如果确实指定了密码,则会立即提示我输入密码(!),然后转储在--password选项中指定的数据库(或者在通常情况下出现错误,即密码与任何数据库都不匹配)名称已指定)。

这是笔录:

$ mysqldump -u test -h myhost --no-data --tables --password lose
    Enter password: 
    -- MySQL dump 10.10
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to
    database 'lose' when selecting the database

那么,有什么作用?这是应该工作的方式吗?当然,这似乎没有意义,也不符合官方文档。最后,如果这只是它的工作方式,那么我该如何指定要在自动化作业中使用的密码?使用期望???

我正在针对pc-linux-gnu(i486)使用`mysqldump Ver 10.10 Distrib 5.0.22.

解决方案

我们尝试了--password = whatever-password-is吗?

也许我错过了这个问题,但这就是我为运行该工具所做的事情。

我不确定它是否适用于--password版本,但是如果我们使用-p,则可以在此后立即指定密码(关键是不要包含空格):

mysqldump -pmypassword ...

-p选项不需要参数。我们只需要输入-p或者--password即可表明我们将使用密码来访问数据库。转储名为-p的数据库的原因是,mysqldump的最后一个参数应该是我们要转储的数据库的名称(如果需要它们,则为--all-databases)。

@Nathan的答案也是如此。我们可以在-p开关后立即指定密码(在脚本中很有用,在执行命令后无法手动输入密码的地方很有用)。

从man mysqldump:

--password[=password], -p[password]
  
  The password to use when connecting to the server. If you use
  the short option form (-p), you cannot have a space between the option
            and the password. If you omit the password value following the
            --password or -p option on the command line, you are prompted for
            one.

            Specifying a password on the command line should be considered
            insecure. See Section 6.6, "Keeping Your Password Secure".

从语法上讲,我们没有正确使用--password开关。因此,命令行解析器看到我们使用" lose"作为独立参数,mysqldump将其解释为数据库名称,就像我们尝试使用更简单的命令(例如" mysqldump loss")时一样。

要解决此问题,请尝试使用--password = lose或者-plose,或者仅使用-p或者--password并在出现提示时输入密码。

尝试在--password丢失之间放置'=',例如:

--password=lose

如果使用-p,则-p和密码(即" -plose")之间不能有空格。

--password [=密码]

这是文档

另一个选择是创建文件〜/ .my.cnf(权限需要为600)。

将此添加到.my.cnf文件

[client]
password=lose

这样,我们就可以以需要密码的MySQL用户身份进行连接,而不必实际输入密码。我们甚至不需要-p或者--password。

对于编写mysql&mysqldump命令脚本非常方便。

如果使用不带参数的-p或者--password,则会出现提示,要求我们输入密码。

如果要在命令行上输入密码,则必须使用-pYOURPASSWORD或者--password = YOURPASSWORD。注意,-p后面没有空格,--password后面有一个" ="符号。

在示例中,mysqldump要求输入密码,然后将" lose"作为数据库名称。如果这是密码,则应包括" ="

也许用户" test"没有访问"丢失"数据库的权限?

我发现如果密码中包含特殊字符,就会发生这种情况。 mysql密码这里有一个!在其中,因此我必须执行== password ='xxx!xxxx'才能正常工作。注意'标记。