如何在MySQL中运行SQL脚本?


409

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

我尝试运行source /Desktop/test.sql并收到错误:

mysql>。\ home \ sivakumar \ Desktop \ test.sql错误:无法打开文件“ \ home \ sivakumar \ Desktop \ test.sql”,错误:2

有什么想法我做错了吗?



基本上我认为这应该是这里的答案:/home/sivakumar/Desktop/test.sql
塔尔西伯尼

Answers:


433

如果您使用的是MySQL命令行mysql>,则必须将SQL文件声明为source

mysql> source \home\user\Desktop\test.sql;

29
对于Mac上的mysql 5.6.10,文件路径不需要单引号。
RNA

3
对于Windows,使用'/'代替'\'对我来说是正确的。最初使用“ /”时出现错误。这就是对我有用的东西。
Zack Macomber

也删除ubuntu上的引号(使用EditLine包装器的mysql Ver 14.14 debian-linux-gnu(x86_64))
Siddhartha

1
@kapil相对于什么?您现在在MySQL内部,所以恐怕没有亲戚。
Thomas Edwards

1
@Sarah可以\ 在空格前使用,或使用来包装文件名"
Thomas Edwards

165

您有很多选择:

  • 使用MySQL命令行客户端: mysql -h hostname -u user database < path/to/test.sql
  • 安装MySQL GUI工具并打开您的SQL文件,然后执行它
  • 如果数据库可通过您的网络服务器使用,请使用phpmysql

3
用户的密码(-p选项)如何?
阿米尔·卡茨

@AmirKatz虽然可以使用该-p选项指定密码,但是不建议这样做:ps在这种情况下,同一主机上的其他用户可以使用系统工具来读取该密码。
欧根·里克

1
@EugenRieck -p不带参数的提示进行到下一行中输入密码
鲍比·杰克

130

您可以使用以下命令执行已写入文本文件中的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


7
在Windows上:对于密码,我必须使用引号和空格来使其起作用(密码本身不包含任何空格或特殊字符):mysql -u yourusername -p"yourpassword"
TmTron 2014年

1
如果你不想让你的密码是在提示我相信方法概述这里将工作:stackoverflow.com/questions/9293042/...
alex9311

58

我最喜欢的选择是:

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

我之所以使用它,是因为当您将其与“”一起使用时,可以避免错误的路径和空格错误,而且还可以避免与char接触时遇到的更多问题。


使用@elcuco注释时,我建议在[space]之前使用此命令,以便它告诉bash忽略将其保存在历史记录中,这在大多数bash中都是开箱即用的。

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

执行命令而不将其保留在历史记录中


额外的安全性

万一您想更加安全,可以使用以下命令并在命令行输入中输入密码:

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

18
我不建议将密码传递给命令行,因为它将保存在〜/ .bash_history中,并且其他程序可以通过/ proc /访问该密码。
elcuco 2015年

@elcuco的出色建议!另外,可能在-p之后使用另一个标志(或将其作为最后一个arg),因此不会错误地将另一个参数用作预期的密码。
davernator

请注意,命令行参数仍对其他用户可见。示例:对于/ proc / * / cmdline中的i;回显$ i; 猫$ i; 完成
elcuco '18

这不是重新开始,因为您将服务器密码公开到控制台的历史记录
Alexius DIAKOGIANNIS

@AlexiusDiakogiannis您能举个例子吗,当在命令前使用[space]执行命令时,如何从历史中查看命令?
塔西伯尼

56

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

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

希望这对某人有帮助。


10
我认为-p密码和密码之间应该没有空格
webNeat

如果写入文件的目的是进行数据转储,我想这SELECT ... INTO OUTFILE /path/to/file.csv是更有效的方法。在此处查看选项和语法-dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis

20

将.sql文件的路径指定为:

source c:/dump/SQL/file_name.sql;

参见图片:


万分感谢!即使您的用户不具有SUDO权限,并且在远程Amazon RDS上也无法使用
Volatil3

20

我也是来这里寻找答案的,这是我发现最适合我的东西:注意我正在使用Ubuntu 16.xx

  1. 使用以下命令访问mysql:

mysql -u <your_user> - p

  1. 在mysql提示符下,输入:

source file_name.sql

希望这可以帮助。


2
除了启动提示符外,将两个步骤合并为一个命令甚至可能会很有用:mysql -u<user> -p -e 'source filename.sql'
junix

谢谢@junix!这种方式使用的source选项就是我一直在寻找的东西。
ManuelJE

14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

不要指定单引号。

如果以上命令不起作用,请将文件复制到c:驱动器,然后重试。如下所示,

mysql> source C:\fn_Split.sql

13

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

使用此代替:

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


9

很可能您只需要更改斜杠/黑斜杠:

 \home\sivakumar\Desktop\test.sql

 /home/sivakumar/Desktop/test.sql

因此,命令将是:

source /home/sivakumar/Desktop/test.sql

6

mysql命令提示符下使用以下命令 -

source \\home\\user\\Desktop\\test.sql;

不使用引号。即使路径包含space(''),也不使用任何引号


5

而不是重定向,我将执行以下操作

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

这将执行文件到SQL文件的路径


5

有很多方法可以做到这一点。

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)运行。

希望这会有所帮助,而不仅仅是多余的。


3

由于mysql -u yourusername -p yourpassword yourdatabase < text_file无法在远程服务器(Amazon EC2)上运行...

确保首先创建数据库。

然后:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql

3

为了将来参考,我发现此方法与上述方法在msql控制台的Windows下相对有效:

mysql >>source c://path_to_file//path_to_file//file_name.sql;

如果您的根驱动器未称为“ c”,则只需与您的驱动器互换即可。首先尝试反斜杠,如果它们不起作用,请尝试正斜杠。如果它们也不起作用,请确保您具有完整的文件路径,文件名带有.sql扩展名,并且如果您的版本坚持使用分号,请确保该文件位于此处并重试。


0

我遇到了此错误,并尝试了所有无法获得的建议。

最后,问题是我的文件夹的文件夹名称中有一个空格,在文件夹路径中显示为正斜杠,一旦找到并删除它,它就可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.