mysqldump访问被拒绝

39

当我试图从SSH备份使用mysqldump时,我在10.64.1.1机器上运行以下命令。但是它给出了以下错误:

mysqldump --user=test -p=password --host=10.64.1.2 --tab=. databasename tablename

mysqldump: Got error: 1045: Access denied for user 'test'@'10.64.1.1' (using password: YES) when trying to connect

然而,我可以使用相同的用户和密码访问mysql。

mysql --user=test -p[password]

当前用户:test@10.64.1.1

SSL:未使用

当前页面: stdout

使用outfile: ''

使用分隔符: ;

服务器版本:5.0.91-50-log Percona SQL Server, Revision 73 (GPL)

协议版本:10

连接方式:通过TCP/IP连接到10.64.1.2

更新:

如果我按照MySQL文档执行以下操作:--password[=password]-p[password]

由于我的密码包含特殊符号@,MySQL无法正确识别用户。它会报错:

mysqldump: Got error: 1044: Access denied for user 'test'@'%' to database

11个回答

51

您需要以管理员身份运行CMD.EXE:

右键单击cmd.exe--> 以管理员身份运行,然后输入您的命令:

mysqldump -u [用户名] -p[密码] -h[IP或名称] 您的数据库名称 > c:\sqlfile.sql

这样应该可以正常工作。


8
这挽救了我剩下的头发! - John
哇!从来没想过运行一个命令会这么困难。 - Rahul Bansal

24

我认为在使用-p时,需要去掉=,或者改用--password:

--password[=password], -p[password]

连接到服务器时使用的密码。如果使用短选项形式(-p),则选项和密码之间不能有空格。如果在命令行上省略--password或-p选项后面的密码值,则会提示输入密码。在命令行上指定密码应被视为不安全。请参阅6.6节,“保持密码安全”。


我尝试了你的方法,但仍然出现错误。由于我的密码包含特殊符号“@”,它看起来像123@456。如果我使用你的方法,在使用-p时省略=号,mysql无法正确识别用户。它会显示:mysqldump: Got error: 1044: Access denied for user 'test'@'%' to database. - chnet
1
是的,我尝试了两种方法。如果我使用文档方法,--password[=password]或-p[password],mysql无法检测到用户。它会抱怨:mysqldump: Got error: 1044: Access denied for user 'test'@'%' to database. - chnet
我看到你的 mysqldump 使用的主机与连接 mysql 时使用的不同。一个是 10.64.1.2,另一个是 10.64.1.1。还有,你允许 mysql 远程连接吗? - Spyros
1
我认为是这样的。在机器10.64.1.1上,我运行:mysql --user=test -p[password]。它可以工作。我认为罪魁祸首是密码中的特殊符号@。如何处理它? - chnet
似乎你正在远程执行mysqldump,因为你传递了一个经过网络路由的主机。请检查你的mysql配置文件,确认是否允许远程连接。 - Spyros
显示剩余3条评论

18

我知道这个话题很老,但是我碰巧遇到了同样的问题。我发现问题仅仅是密码中使用了特殊字符。实际上,它们必须用反斜杠进行转义:--password=123\@456或者使用单引号--password='123@456'


1
这对我有用。感谢您在旧问题上发布不同的答案!在Linux上需要添加引号,但在Windows上不需要引号。 - Samuel Neff
2
谢谢,这个问题也被解决了。最终得到的是-p'P@$$W0RD' - Seroczynski

7
在Windows系统中,我通过创建一个目录并将*.sql文件倒入备份目录来解决此问题。

C:\backup

以下是无误的命令:
移除[ ]方括号

mysqldump -u[用户名] -p[密码] -h[IP地址] 你的数据库 > C:\backup\sqlfile.sql

对我有效 :)


1
我遇到了同样的问题,因为我试图在C:\中创建备份,但当我更改文件系统路径时,它就起作用了! - Rodolfo Velasco

7
我曾经遇到过一个跟通过Plesk创建的数据库用户有关的问题。该用户只有单个数据库的权限。如果我指定数据库名称,就会出现上述错误。如果我为所有数据库指定-A,那么备份就可以正常工作。

5

可能的原因之一是您尝试创建转储的位置。 将 mysqldump -u[用户名] -p yourdb > sqlfile.sql 更改为 mysqldump -u[用户名] -p yourdb > D:\backup\sqlfile.sql 可以解决问题。


1

连接选项中没有=(等号)。您需要以下内容。

mysqldump -u test -ppassword -h 10.64.1.2 ...

查看文档以获取有关其他选项的更多详细信息。


还是不行,正如Tim所说,当你指定了数据库名称后,我遇到了这个错误,导出所有的数据库却没有问题。 - holms
注意*...*,您需要添加其余选项。 - Jason McCreary
2
--password=foo 是长格式,-pfoo 是短格式。两者都是有效的。 - Tim
1
找到解决方案 - 这个错误是由于我的用户没有锁定表的权限引起的。 - holms

0
根据此页面 https://dev.mysql.com/mysqldump-copying-database,打开控制台窗口(如cmd),并导航到您的mysql安装文件夹。例如c:\ mysql,然后转到bin文件夹,这样您就有了c:\ mysql \ bin

然后输入:

mysqldump source_db_name -uuser_name -ppassword  > target_database.sql

请确保在使用 -u 和 -p 参数时没有空格!完成后,请输入:

mysqladmin create target_database -uuser_name -ppassword

现在,您可以将 target_database.sql 中的数据迁移到新数据库中:

mysql target_database < target_database.sql -uuser_name -ppassword

这是一种非常“简单而愚蠢”的方式,在同一台服务器上克隆您的数据库到一个新的数据库。虽然我的描述很简单和愚蠢,但也许有一天对某个人会有用 :-)


0
这是对我有效的方法- 以管理员身份运行cmd命令行。 在-p后不要输入任何密码,系统会自动提示您输入密码并且它会起作用。

0
问题在于需要额外访问 C:/ 位置才能创建文件,因此尝试使用其他方式。对我而言,解决方法是: mysqldump -u root -p cricket classics > C:\Users\habib_s9ayvfl\Desktop\classics.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接