如何在MySQL中运行SQL脚本?

use*_*432 372 mysql command-line

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

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

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

对我做错了什么的想法?

Tho*_*rds 402

如果您在MySQL命令行mysql>,则必须将SQL文件声明为source.

mysql> source \home\user\Desktop\test.sql;
Run Code Online (Sandbox Code Playgroud)

  • 对于Mac上的mysql 5.6.10,文件路径不需要单引号. (29认同)
  • 对于Windows,使用'/'而不是'\'为我正常工作.我最初使用'/'时出错了.这对我有用...来源C:/Users/macombers/Downloads/midcoast_db.sql; (3认同)
  • @kapil 我知道这篇文章已经很老了,但是如果您在启动 mysql 之前位于脚本所在的文件夹中,则无需输入完整路径。 (2认同)

Eug*_*eck 142

你有很多选择:

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

  • 用户的密码(-p 选项)呢? (4认同)
  • @EugenRieck `-p` 不带参数提示在下一行输入密码 (3认同)

Pau*_*sch 117

您可以使用以下命令执行已在文本文件中编写的mysql语句:

mysql -u yourusername -p yourpassword yourdatabase < text_file
Run Code Online (Sandbox Code Playgroud)

如果尚未创建您的数据库,请首先使用以下命令登录您的mysql:

mysql -u yourusername -p yourpassword yourdatabase
Run Code Online (Sandbox Code Playgroud)

然后:

mysql>CREATE DATABASE a_new_database_name
Run Code Online (Sandbox Code Playgroud)

然后:

mysql -u yourusername -p yourpassword a_new_database_name < text_file
Run Code Online (Sandbox Code Playgroud)

应该这样做!

更多信息:http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

  • 在Windows上:对于密码,我必须使用引号和没有空间使其工作(密码本身不包含任何空格或特殊字符):`mysql -u yourusername -p"yourpassword"` (6认同)
  • 如果您不希望您的密码出现在提示中,我相信这里概述的方法会起作用:http://stackoverflow.com/questions/9293042/mysqldump-without-the-password-prompt (2认同)

Bhu*_*han 50

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

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.

  • 我认为`-p`和密码之间应该没有空格 (8认同)

tal*_*ony 42

我最喜欢的选择是:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"
Run Code Online (Sandbox Code Playgroud)

我以这种方式使用它,因为当你用""字符串串起它时,你会避免错误的路径和带空格的错误 - 而且可能会遇到更多我没有遇到过的字符问题.


使用@elcuco评论我建议在[space]之前使用此命令,因此它告诉bash忽略在历史记录中保存它,这将在大多数bash中开箱即用.

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

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

  • 我不建议将密码传递给命令行,因为它将保存在〜/ .bash_history中,并且可以通过/ proc /访问其他程序. (14认同)

Zac*_*ith 18

我来这里寻找这个答案,这里是我发现的最适合我的方法:注意我使用的是Ubuntu 16.xx

  1. 访问mysql使用:

mysql -u <your_user> - p

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

source file_name.sql

希望这可以帮助.

  • 除了启动提示之外,将两个步骤合并在一个命令中甚至可能很有用:`mysql -u&lt;user&gt; -p -e 'source filename.sql'` (5认同)

小智 18

而不是重定向我会做以下

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'
Run Code Online (Sandbox Code Playgroud)

这将执行文件 path-to-sql-file


Shu*_*rma 15

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

source c:/dump/SQL/file_name.sql;
Run Code Online (Sandbox Code Playgroud)

见图片:


小智 14

mysql> source C:\Users\admin\Desktop\fn_Split.sql
Run Code Online (Sandbox Code Playgroud)

不要指定单引号.

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

mysql> source C:\fn_Split.sql
Run Code Online (Sandbox Code Playgroud)


Ric*_*pie 12

从 linux 14.04 到 MySql 5.7,使用cat通过 mysql 登录的管道命令:

cat /Desktop/test.sql | sudo mysql -uroot -p 
Run Code Online (Sandbox Code Playgroud)

您可以使用此方法直接从 Shell 执行许多 MySQL 命令。例如:

echo "USE my_db; SHOW tables;" | sudo mysql -uroot -p 
Run Code Online (Sandbox Code Playgroud)

确保用分号 (';') 分隔命令。

我在上面的答案中没有看到这种方法,并认为这是一个很好的贡献。


Jor*_*dez 11

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

请改用:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Run Code Online (Sandbox Code Playgroud)


Don*_*ong 10

有很多方法可以做到。

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
Run Code Online (Sandbox Code Playgroud)

如果您从命令行收到错误,请确保您之前已运行

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 
Run Code Online (Sandbox Code Playgroud)

这必须从 mysqld.exe 目录中运行,因此是 CD。

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


小智 9

mysql -uusername -ppassword database-name < file.sql
Run Code Online (Sandbox Code Playgroud)


Ben*_*Lin 8

很可能,你只需要更改斜杠/ blackslash:from

 \home\sivakumar\Desktop\test.sql
Run Code Online (Sandbox Code Playgroud)

 /home/sivakumar/Desktop/test.sql
Run Code Online (Sandbox Code Playgroud)

所以命令是:

source /home/sivakumar/Desktop/test.sql
Run Code Online (Sandbox Code Playgroud)


Raj*_*aul 6

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

source \\home\\user\\Desktop\\test.sql;
Run Code Online (Sandbox Code Playgroud)

不使用报价单.即使路径包含空格('')也根本不使用引号.