mysqldump --password是否真的按照它说的做?
我正在尝试使用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'才能正常工作。注意'标记。