我想在MySQL中执行包含SQL查询的文本文件。
我尝试运行source /Desktop/test.sql
并收到错误:
的MySQL> 。 \ home \ sivakumar \ Desktop \ test.sql错误:无法打开文件 '\ home \ sivakumar \ Desktop \ test.sql',错误:2
对我做错了什么的想法?
答案 0 :(得分:370)
如果您在MySQL命令行mysql>
,则必须将SQL文件声明为source
。
mysql> source \home\user\Desktop\test.sql;
答案 1 :(得分:128)
你有很多选择:
mysql -h hostname -u user database < path/to/test.sql
答案 2 :(得分:110)
您可以使用以下命令执行已在文本文件中编写的mysql语句:
mysql -u yourusername -p yourpassword yourdatabase < text_file
如果还没有创建数据库,请首先使用以下命令登录mysql:
mysql -u yourusername -p yourpassword yourdatabase
然后:
mysql>CREATE DATABASE a_new_database_name
然后:
mysql -u yourusername -p yourpassword a_new_database_name < text_file
应该这样做!
此处有更多信息:http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html
答案 3 :(得分:43)
所有最佳答案都很好。但是,如果有人想要从远程服务器上的文本文件中运行查询 AND 将结果保存到文件(而不是在控制台上显示),则可以执行以下操作:
mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file
希望这有助于某人。
答案 4 :(得分:36)
我最喜欢的选择是:
mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"
我这样使用它是因为当你用&#34;&#34;你避免错误的路径和错误的空间和 - 以及可能更多的问题,我没有遇到过。
使用@elcuco评论我建议在[space]之前使用此命令,因此它告诉bash忽略在历史记录中保存它,这将在大多数bash中开箱即用。
如果它仍在历史记录中保存您的命令,请查看以下解决方案:
Execute command without keeping it in history
额外的安全性修改
如果您想要更加安全,可以使用以下命令并在命令行输入中输入密码:
mysql --user="username" --database="databasename" -p < "filepath"
答案 5 :(得分:15)
我也来这里寻找这个答案,这里是我发现最适合我的方法:注意我使用的是Ubuntu 16.x.x
mysql -u <your_user> - p
source file_name.sql
希望这有帮助。
答案 6 :(得分:14)
mysql> source C:\Users\admin\Desktop\fn_Split.sql
不要指定单引号。
如果上述命令无效,请将文件复制到c:驱动器,然后重试。 如下图所示,
mysql> source C:\fn_Split.sql
答案 7 :(得分:13)
将.sql文件的路径指定为:
source c:/dump/SQL/file_name.sql;
答案 8 :(得分:11)
直接从命令行传递密码参数绝不是一个好习惯,它保存在~/.bash_history
文件中,可以从其他应用程序访问。
请改用:
mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
答案 9 :(得分:8)
com.apple.dt.Xcode
答案 10 :(得分:7)
很可能,您只需要更改斜杠/反斜杠: 从
\home\sivakumar\Desktop\test.sql
到
/home/sivakumar/Desktop/test.sql
所以命令是:
source /home/sivakumar/Desktop/test.sql
答案 11 :(得分:6)
使用 mysql命令提示符 -
中的以下内容source \\home\\user\\Desktop\\test.sql;
不使用报价单。即使路径包含空格(''),也要使用无引号。
答案 12 :(得分:3)
为了供将来参考,我在msql控制台的Windows下,发现这与上述方法有效:
的MySQL&GT;&GT; source c://path_to_file//path_to_file//file_name.sql;
如果您的根驱动器未被调用&#34; c&#34;然后只需要与您的驱动器进行交换。首先尝试反斜杠,如果它们不起作用,请尝试正斜杠。如果它们也不起作用,请确保您拥有完整的文件路径,文件名上的.sql扩展名,如果您的版本坚持使用分号,请确保它在那里并再试一次。
答案 13 :(得分:2)
由于mysql -u yourusername -p yourpassword yourdatabase < text_file
无法在远程服务器(亚马逊的EC2)上运行...
确保首先创建数据库。
然后:
mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
答案 14 :(得分:2)
从Linux 14.04到MySql 5.7,使用cat
命令通过mysql登录进行管道传输:
cat /Desktop/test.sql | sudo mysql -uroot -p
您可以将此方法用于许多直接从Shell执行的MySQL命令。例如:
echo "USE my_db; SHOW tables;" | sudo mysql -uroot -p
确保使用分号(';')分隔命令。
我在上面的答案中没有看到这种方法,并认为这是一个很好的贡献。
答案 15 :(得分:0)
我遇到了这个错误,并尝试了所有可能无效的建议。
最后,问题是我的文件夹在文件夹名称中有一个空格,在文件夹路径中显示为正斜杠,一旦找到并删除它,它就可以正常工作。
答案 16 :(得分:0)
代替重定向,我将执行以下操作
mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'
这将执行文件到SQL文件的路径
答案 17 :(得分:0)
有很多方法可以做到这一点。
From Workbench: File > Run SQL Script -- then follow prompts
From Windows Command Line:
Option 1: mysql -u usr -p
mysql> source file_path.sql
Option 2: mysql -u usr -p '-e source file_path.sql'
Option 3: mysql -u usr -p < file_path.sql
Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
mysql -u usr -p < file_path.sql
如果从命令行中获取错误,请确保您以前已经运行过
cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize
这必须在mysqld.exe目录(因此是CD)中运行。
希望这是有帮助的,而不仅仅是多余的。