7

这个问题已经折磨了我几个小时。我一直在尝试使用 mysqldump 转储数据库,使用:

mysqldump --protocol=socket -S /var/run/mysqld/mysqld.sock database`

但是,我不断得到:

1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect

我在本地主机上并在根目录下运行(sudo su)。mysql 用户表中允许使用
Root@localhost 。
我可以> mysql用来查看所有的数据库,但是mysqldump 不行。
我不知道root密码(系统生成)。
我已经尝试像这样将套接字添加到my.conf并重新启动 mysql 服务器:

[mysqldump]
socket = /var/run/mysqld/mysqld.sock

任何帮助,将不胜感激!

4

2 回答 2

15

即使您通过套接字连接,您仍然必须给用户root

如果root@localhost没有密码,请执行以下操作:

mysqldump -uroot --protocol=socket -S /var/run/mysqld/mysqld.sock database

如果root@localhost有密码,请执行以下操作:

mysqldump -uroot -p --protocol=socket -S /var/run/mysqld/mysqld.sock database

如果运行

mysql

让您通过指定登录-uroot,尝试不指定套接字

mysqldump database

我刚刚注意到您为 mysqldump 指定的套接字是

[mysqldump]
socket = /var/run/mysqld/mysqld.sock

您需要确保套接字也在[mysqld]部分下定义my.cnf

如果这不存在

[mysqld]
socket = /var/run/mysqld/mysqld.sock

然后运行此查询

SHOW VARIABLES LIKE 'socket';

并确保套接字文件的名称和路径。

您可以让系统 DBA 为您添加自定义用户

GRANT ALL PRIVILEGES ON *.* TO tyler@localhost;

然后,您可以运行

mysqldump -utyler --protocol=socket -S /var/run/mysqld/mysqld.sock database

这是不安全的。泰勒应该有密码。所以,运行这个:

SET SQL_LOG_BIN=0;
GRANT ALL PRIVILEGES ON *.* TO tyler@localhost IDENTIFIED BY 'tylerspasssword';

那么你可以做

mysqldump -utyler -p --protocol=socket -S /var/run/mysqld/mysqld.sock database

试试看 !!!

于 2013-03-10T04:25:59.727 回答
2

我找到了解决方案!套接字本身不保存凭据。它们存储在/root/.my.cnf配置文件中。我的只有该mysql命令的用户名和密码。我也需要添加[mysqldump]它。这是我的/root/.my.cnf文件现在的样子:

[mysql]
user=root
pass=myawesomepass

[mysqldump]
user=root
pass=myawesomepass

于 2013-03-10T06:05:25.243 回答