这个问题已经困扰我几个小时了。我一直在尝试使用 mysqldump 转储数据库,使用:
mysqldump --protocol=socket -S /var/run/mysqld/mysqld.sock database`
但是,我不断得到:
1045:尝试连接时用户 'root'@'localhost'(使用密码:NO)访问被拒绝
我在本地主机上并在根目录下运行 (sudo su)。
Root@localhost 在 mysql 用户表中被允许。
我可以使用 > mysql
查看所有的数据库,但是 mysqldump 不会工作。
我不知道 root 密码(系统生成)。
我尝试像这样将套接字添加到 my.conf 并重新启动 mysql 服务器:
[mysqldump]
socket = /var/run/mysqld/mysqld.sock
如有任何帮助,我们将不胜感激!
最佳答案
即使你通过套接字连接,你仍然必须给用户 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指定的socket是
[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 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
试一试!!!
关于mysqldump 无法使用套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318875/