带有 exec.Command 的 mysqldump 导致 1045 错误,但在终端上工作正常
Posted
技术标签:
【中文标题】带有 exec.Command 的 mysqldump 导致 1045 错误,但在终端上工作正常【英文标题】:mysqldump with exec.Command results in 1045 error, but works fine from terminal 【发布时间】:2020-03-23 02:34:54 【问题描述】:cmd 初始化
cmd := exec.Command("mysqldump",
"--column-statistics=0",
"--default-character-set=utf8",
"-P", port,
"-h", host,
"-u", username,
fmt.Sprintf("-p'%s'", password),
dbname)
我得到的错误文本
mysqldump: [警告] 在命令行界面使用密码 可能不安全。 mysqldump:得到错误:1045:用户访问被拒绝 'user'@'ipaddress'(使用密码:YES)尝试连接时
cmd.String() 输出
/usr/bin/mysqldump --column-statistics=0 --default-character-set=utf8 -P 端口 -h 主机 -u 用户名 -p'password' dbname
当我在同一台机器上的终端中执行 cmd.String() 输出时,一切都按预期工作。 这种行为的原因可能是什么?
【问题讨论】:
【参考方案1】:您可能有一个匿名用户 ''@'localhost'
或 ''@'127.0.0.1'
。
运行 mysql> SELECT user, host FROM mysql.user;
以查看您在 mySQL 上拥有哪些用户。
Documentation:
当可能有多个匹配时,服务器必须确定哪一个 他们使用。它解决了这个问题如下:(...)
当客户端尝试连接时,服务器会查看行 [表 mysql.user] 按排序顺序。服务器使用第一行 匹配客户端主机名和用户名。 (...) 服务器使用 使用最具体的 Host 值对行进行排序的排序规则 第一的。文字主机名 [例如 'localhost'] 和 IP 地址是 最具体的。
注意:空字符串在 MySQL 的身份验证算法中充当通配符
【讨论】:
您应该在发布问题之前查找有此问题的其他人,只是说... 有匿名用户,但我连接到不在本地主机上的数据库。用户表中我的用户的主机条目看起来像 1.1.%。我连接的服务器的 ip 看起来像 1.1.2.3。所以应该有一个匹配以上是关于带有 exec.Command 的 mysqldump 导致 1045 错误,但在终端上工作正常的主要内容,如果未能解决你的问题,请参考以下文章
如何与 Runtime.getRuntime().exec(command) 程序进行交互?
防止 Ctrl+C 中断 Golang 中的 exec.Command
exec.Command错误,没有输出到stdout或stderr
在 Golang 中运行 exec.Command 时如何调试“退出状态 1”错误