mysqldump 无法使用套接字连接

标签 mysql bash ubuntu mysqldump

这个问题已经困扰我几个小时了。我一直在尝试使用 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/

相关文章:

linux - 仅在 alpine linux 上出现算术语法错误

ubuntu - Julia 问题 : ERROR: UndefVarError: JacobiRec not defined

linux - 如何从shell脚本重新加载/etc/environment

python - Pycrypto 和 mySQL 问题

mysql - 在 MySQL 中组合/堆叠选择结果中的列

linux - 用于重命名文件夹和子文件的 Shell 脚本

java - Apache Storm nimbus : connection refused

mysql - 为什么连接到 MySQL 服务器这么慢?

mysql - 新字段未显示在搜索中

linux - 如何仅在命令完成时输出