2013-03-10 108 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