正确的 MySQL 用户名/密码,但从脚本运行时出现“访问被拒绝”错误

正确的 MySQL 用户名/密码,但从脚本运行时出现“访问被拒绝”错误

我目前正在尝试从 shell 脚本中运行以下命令。

/usr/bin/mysql -u username -ppassword -h localhost database

手动执行时,它工作得很好,而不是在脚本中执行。当我尝试执行包含该命令的脚本时,出现以下错误:

ERROR 1045 (28000) at line 3: Access denied for user 'username'@'localhost' (using password: YES)

我确实将有效命令复制并粘贴到了脚本中。为什么会出现错误?附注:最终目的是使用 cron 运行脚本。

编辑:这是我尝试运行的脚本的精简版。您可以忽略其中的大部分内容,直到第 19 行左右连接到 MySQL 为止。

#!/bin/sh
#Run download script to download product data
cd /home/dir/Scripts/Linux
/bin/sh script1.sh

#Run import script to import product data to MySQL
cd /home/dir/Mysql
/bin/sh script2.sh

#Download inventory stats spreadsheet and rename it
cd /home/dir
/usr/bin/wget http://www.url.com/file1.txt
mv file1.txt sheet1.csv

#Remove existing export spreadsheet
rm /tmp/sheet2.csv

#Run MySQL queries in "here document" format
/usr/bin/mysql -u username -ppassword -h localhost database << EOF

--Drop old inventory stats table
truncate table table_name1;

--Load new inventory stats into table
Load data local infile '/home/dir/sheet1.csv' into table table_name1 fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';

--MySQL queries to combine product data and inventory stats here

--Export combined data in spreadsheet format
group by p.value into outfile '/tmp/sheet2.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
EOF

编辑 2:经过更多测试后,问题出在<< EOF命令末尾的那个。这是为“此处文档”准备的。删除后,命令可以正常工作。问题是我需要<< EOF那个,这样 MySQL 查询才能运行。

答案1

事实证明,根本原因是我尝试在没有适当权限的情况下执行 MySQL 查询中的命令。这就是为什么它显示错误at line 3,即 SQL 查询的第 3 行。我切换到root,现在一切正常。以下是更清楚地提出和回答的问题:

MySQL 访问因“此处文档”而被拒绝

答案2

您是否在本地主机上使用相同的命令/脚本?或者在远程服务器上,请记住,中的每个条目mysql.users都是由设置的host,因此如果您只使用本地主机,它将无法用于远程访问,反之亦然。

答案3

如果是 bash shell 脚本,您可以将 #! 行设置为#!/bin/bash -x,这会使脚本向控制台输出其正在执行的确切命令。然后,您可以获取该命令并手动尝试,或者查看它与您已经手动运行的命令有何不同。

除此之外,从运行此命令的脚本中发布一个片段会很有帮助,这样我们就有更多的上下文来回答这个问题。

答案4

最后一行仅包含“EOF\n”是绝对重要的。行尾的单个空格符号可以使标记与第一行使用的标记不同。对于您的情况,只需在“EOF”行后添加空字符串即可。

在代码的最后一行添加注释行是一个好习惯。

/usr/bin/mysql -u username -ppassword -h localhost database << EOF
. . . . . 
EOF

### 

相关内容