2013-03-10 152 views
3

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

我在本地主机上,并在根运行(须藤苏) 。
root @ localhost被允许在mysql用户表中。
我可以使用> mysql查看所有的数据库,但mysqldump不起作用。
我不知道root密码(系统生成)。
我曾尝试加入插座到my.conf像这样并重新启动MySQL服务器:

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

任何帮助,将不胜感激!

回答

1

我找到了解决方案!套接字本身不包含凭证。它们存储在/root/.my.cnf配置文件中。我只有mysql命令的用户名和密码。我还需要添加[mysqldump]。这里是我的/root/.my.cnf文件看起来像现在:

[mysql]
user=root
pass=myawesomepass

[mysqldump]
user=root
pass=myawesomepass

9

即使您是通过插座连接,你仍然必须给用户root

如果[email protected]有那么没有密码,这样做:

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

如果[email protected]有一个密码,然后做到这一点:

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

如果运行

mysql 

让你与指定-uroot登录,尽量不要指定插座或者

mysqldump database 

我只注意到了mysqldump的指定插座你是

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

你需要确保插座定义在my.cnf[mysqld]部分以及

如果不存在

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

然后运行该查询

SHOW VARIABLES LIKE 'socket'; 

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

你可以有你系统DBA添加自定义用户对您

GRANT ALL PRIVILEGES ON *.* TO [email protected]; 

然后,您可以运行

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

这是不安全的。泰勒应该有一个密码。所以,这条命令:

SET SQL_LOG_BIN=0; 
GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY 'tylerspasssword'; 

那么你可以做

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

试试看!

+0

感谢您的帮助,但没有去。 'Root @ localhost'确实有密码,但它是由服务器生成的。我最初运行'mysqldump数据库',但它给出了相同的错误,并认为需要指定套接字。 'mysql'运行时没有'-uroot',但'mysqldump'仍然会出现错误。想法? – TylerH4 2013-03-10 04:36:33

+0

增加了另一个建议... – RolandoMySQLDBA 2013-03-10 04:42:06

+0

套接字已在'[mysqld]'下定义。我将该行复制到'[mysqldump]'部分以获得更好的效果。 – TylerH4 2013-03-10 04:53:56