mysqldump无法使用socket连接

时间:2013-03-10 04:21:18

标签: mysql bash ubuntu mysqldump

这个问题一直困扰着我的大脑几个小时。我一直在尝试使用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

我在localhost上并在root下运行( sudo su ) mysql用户表中允许使用 Root @ localhost 我可以使用> mysql查看所有数据库,但mysqldump不起作用 我不知道root密码(系统生成) 我试过像这样添加套接字到 my.conf 并重新启动mysql服务器:

  

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:9)

即使您通过套接字进行连接,仍必须向用户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]的{​​{1}}部分下定义的

如果不存在

my.cnf

然后运行此查询

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

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

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

SHOW VARIABLES LIKE 'socket';

然后,你可以运行

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';

试一试!!!

答案 1 :(得分:1)

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

  

[mysql]
  user=root
  pass=myawesomepass

     

[mysqldump]
  user=root
  pass=myawesomepass