我想在MySQL中执行一个包含SQL查询的文本文件。

我试着运行source /Desktop/test。SQL和收到的错误:

mysql >。回家\ \ sivakumar桌面\ \测试。sql ERROR:无法打开文件 ' \ \ sivakumar \电脑\测试。Sql ',错误:2

你知道我哪里做错了吗?


当前回答

所有排在前面的答案都是好的。但如果有人想从远程服务器上的文本文件中运行查询并将结果保存到一个文件中(而不是在控制台上显示),你可以这样做:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

希望这能帮助到一些人。

其他回答

很可能,你只需要改变斜杠/黑斜杠: 从

 \home\sivakumar\Desktop\test.sql

to

 /home/sivakumar/Desktop/test.sql

因此,命令将是:

source /home/sivakumar/Desktop/test.sql

从命令行直接传递password参数永远都不是一个好习惯,它保存在~/。Bash_history文件,可以从其他应用程序访问。

用这个代替:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:

我最喜欢的做法是:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

我这样使用它是因为当你用""来串的时候,你可以避免错误的路径和空格的错误,而且可能还有更多我没有遇到过的字符问题。


对于@elcuco注释,我建议在使用此命令之前使用[空格],这样它就会告诉bash忽略在历史中保存它,这将在大多数bash中开箱工作。

如果您的命令仍然保存在历史记录中,请查看以下解决方案:

执行命令时不保留历史记录


额外的安全编辑

如果你想要更加安全,你可以使用以下命令并在命令行输入输入密码:

mysql --user="username" --database="databasename" -p < "filepath"

我使用Bash的Here字符串进行即时SQL执行:

mysql -uroot -p <<<"select date(now())"

https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Strings

我犯了这个错误,我尝试了所有我能得到的建议,但都无济于事。

最后,问题是我的文件夹在文件夹名称中有一个空格,在文件夹路径中出现正斜杠,一旦我找到并删除它,它就工作得很好。