如何在MySQL中使用命令行导入SQL文件?


2031

我有一个.sql从导出的文件phpMyAdmin。我想使用命令行将其导入到其他服务器中。

我有Windows Server 2008 R2安装。我将.sql文件放在C驱动器上,并尝试了此命令

database_name < file.sql

它不起作用。我收到语法错误。

  • 如何顺利导入该文件?
  • 我需要先创建一个数据库吗?



7
这些重复的家伙怎么了?这确实是一个有用的问题,它具有自己的目的
Valentino Pereira

@ValentinoPereira,在确定重复的球员之前,您是否检查过原始的问题日期
AZinkey

您可以分享一个可复制的示例吗?database < file.sql在我看来不像任何命令,如果您看到一些语法错误,请与他人分享
Nico Haase

Answers:


3769

尝试:

mysql -u username -p database_name < file.sql

检查MySQL选项

注1:最好使用SQL文件的完整路径file.sql

注2:使用-R--triggers保留原始数据库的例程和触发器。默认情况下不会复制它们。

注意3如果可能不存在,则可能必须从mysql创建(空)数据库,并且导出的SQL不包含CREATE DATABASE(用--no-create-db-n选项导出),然后才能导入它。


2
当我从Toad之类的程序运行文件时,我没有收到错误,但是从命令行运行文件时,却出现了我提到的错误
Jaylen 2013年

110
请注意,是的,如果还不存在,则必须从mysql创建(空)数据库,然后才能导入它。
Skippy le Grand Gourou 2015年

17
是的,请记住要像这样从MySQL控制台创建一个空数据库(如果该数据库以前不存在):CREATE DATABASE db-name;
Qasim

3
确保检查备份文件中是否没有“ use'original_db'”。尽管我指定还原到新数据库“ mysql new_db <dump.sql”,但是sql dump文件中包含该文件,并且它覆盖了我的活动数据库。不知道是否有一个选项可以强制它使用指定的数据库,而忽略sql文件中的“
use'original_db

7
@Joe,是的,如果在'-p'和'password'之间有空格,它会认为'password'是数据库名称。或者,您可以输入不带密码的“ -p”,然后按Enter键时会提示您输入密码。
NotJay

763

mysqldump的常见用法是对整个数据库进行备份:

shell> mysqldump db_name > backup-file.sql

您可以像这样将转储文件加载回服务器:

UNIX系统

shell> mysql db_name < backup-file.sql

Windows命令提示符中相同:

mysql -p -u [user] [database] < backup-file.sql

电源外壳

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

MySQL命令行

mysql> use db_name;
mysql> source backup-file.sql;

@Mike您是否正在尝试在mysql>命令行中启动它?您应该改用shell。
vladkras

如何使用壳牌?我正在Windows Server 2008上使用mysql5.6
Jaylen

使用Windows PowerShell输入MySQL db_name <file.sql,我得到以下错误,'<'运算符保留给以后使用
Jaylen 2013年

31
使用>将mysqldump输出重定向到文件时要特别小心,特别是如果您想控制编码。相反,您可能希望使用--result-file参数,以便编码不受Shell / OS的控制。
Bernard Chen

1
是的,但是...为什么不mysql直接从Powershell 运行呢?
查尔斯·伍德

328

关于导入大文件所花费的时间:最重要的是,它花费了更多时间,因为MySQL的默认设置为autocommit = true。在导入文件之前,必须先将其关闭,然后检查导入的工作方式像gem。

您只需要执行以下操作:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

5
有没有一种方法可以在用于导入的mysql命令的单个命令行中执行此操作?
Volomike 2015年

最好的答案inho。这是source我忘记的命令。我们大多数人要做到这一点,而我们在登录其他命令中独立的命令,而不是标准登录>注入>注销oneliner在谷歌搜索结果页面的顶部。
davidkonrad'Mar

19
我同意这是最好的答案。该autocommit=0部分在速度方面产生了巨大的变化。
aexl

2
autocommit=0在更大的文件上工作吗?像8gb sql文件。
新手

3
并非总是需要关闭autocommit。值得在编辑器中检查数据库转储,它可能已经以开头SET autocommit=0;
hashchange '18年

127

在所有答案中,对于上述问题,这是最好的答案:

 mysql> use db_name;
 mysql> source file_name.sql;

建议上面的错误失败,指出数据库已经存在,但这似乎
可行

74

我们可以使用以下命令从命令行导入SQL:

mysql -u username -p password db_name < file.sql

例如,如果用户名是root,密码是password。您的数据库名称为bank,SQL文件为bank.sql。然后,只需执行以下操作:

mysql -u root -p password bank < bank.sql

记住您的SQL文件在哪里。如果您的SQL文件位于Desktop文件夹/目录中,请转到桌面目录并输入如下命令:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

并且如果您在Project目录中,而您的SQL文件在Desktop目录中。如果要从Project目录访问它,则可以执行以下操作:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql

22
-ppassword
Ejaz 2014年

日本 这行不通。正确的是mysql -u root -p"password" bank < bank.sql
阿明2015年

4
为什么您根本无法在一行中回答? mysql -u username -ppassword db_name < file.sql
函数naveed

6
尽管这与该问题/答案完全无关,但是在使用非平凡的数据库时,最好不要在同一命令上以纯文本形式输入密码。不指定密码,该命令将提示您输入密码的一部分,你可以安全地输入
ASGS

3
特别是因为.bash_history
Neil Chowdhury

64

导入架构的最简单方法:

登录到mysql并发出以下提到的命令。

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
如果其中没有包含multilpe db的转储,则无需使用“ use”命令即可运行
Hayden Thring

1
我试图从名称不同但结构相同的数据库中导入转储,作者选择的正确答案无效,它在转储文件中创建了一个以该数据库命名的新数据库。谢谢,这是我想要的答案,谢谢
Wuelber Castillo

1
大!我正在寻找什么!
谢尔盖·扎哈哈连科

2
这也监控脚本执行,远好于其他的答案
refex

61

如果您已经有数据库,请使用以下命令导入dumpsql文件:

mysql -u username -p database_name < file.sql

如果不需要,则需要在MySQL中创建相关的数据库(空),为此首先要MySQL通过在终端或cmd中运行以下命令来登录控制台

mysql -u userName -p;

并在提示时提供密码。

接下来,创建一个数据库并使用它:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

然后将sqldump文件从导入到数据库

mysql> source pathToYourSQLFile;

注意:如果终端不在dumpor sql文件所在的位置,请使用上面的相对路径。


您的答案为像我这样的MySQL初学者提供了一个全新的解决方案:1.创建数据库(如果不存在)。2.将源文件指向创建的数据库以导入数据/元数据。
Sumanth Lazarus,

60
  1. 打开MySQL命令行
  2. 输入您的mysql bin目录的路径,然后按 Enter
  3. 将您的SQL文件粘贴bin到mysql服务器的文件夹中。
  4. 在MySQL中创建数据库。
  5. 使用要导入SQL文件的特定数据库。
  6. 类型source databasefilename.sqlEnter
  7. 您的SQL文件成功上传。

2
ype mysql bin目录的路径,然后按
Ramesh Pareek

46

适用于我的解决方案如下:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

将我的sql文件放在正确的/ bin目录视图Windows资源管理器中之后,这对我使用MySQL Command Line Client起作用。谢谢
klewis '17

3
有点慢,但不会停在中间,不要说MySQL服务器已经消失了。
Jaskaran Singh

39

要将数据库转储到SQL文件中,请使用以下命令。

mysqldump -u username -p database_name > database_name.sql

要将SQL文件导入数据库(确保您与SQL文件位于同一目录中或提供文件的完整路径),请执行以下操作:

mysql -u username -p database_name < database_name.sql

37

转到拥有MySQL可执行文件的目录。-u输入用户名并-p提示输入密码:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql

5
当您为意图添加一些说明时,我认为这对于OP和其他问题会更有用。
记者

仅当您在Windows环境变量中定义了mysql.exe时,该方法才有效。如果不是,则应键入mysql.exe文件的所有路径。而且您的语法是错误的。例如: “d:\ WAMP \ BIN \ mysql的\ mysql5.5.8 \ BIN \ -u的mysql.exe -p YOUR_USERNAME DB_NAME <FILENAME.SQL”这里的更多信息:wpy.me/en/blog/...
wappy


28

要导入单个数据库,请使用以下命令。

mysql -u username -p password dbname < dump.sql

要导入多个数据库转储,请使用以下命令。

mysql -u username -p password < dump.sql

20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql

17

要一次导入多个SQL文件,请使用以下命令:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

对于简单的导入:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

对于WAMP

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

对于XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql

16

如果.sql文件包含CREATE DATABASE IF NOT EXISTS db_nameUSE db_name语句,则无需在命令行上指定数据库的名称。

如果.sql文件中提到的数据库不存在,只需确保您与具有创建数据库权限的用户连接即可。



11

转到您拥有MySQL的目录。

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

同样,要转储所有数据库,请使用该-all-databases选项,并且不再需要指定数据库的名称。

mysqldump -u username -ppassword all-databases > dump.sql

或者,您可以使用SQLyog之类的GUI客户端来执行此操作。


11

采用:

mysql -u root -p password -D database_name << import.sql

使用MySQL帮助获取详细信息- mysql --help

我认为在我们的情况下,这些将是有用的选择:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

有趣的是,如果我们要导入一个大型数据库而没有进度条。使用管道查看器,查看通过管道进行的数据传输

对于Mac, brew install pv

对于Debian / Ubuntu ,apt-get install pv

对于其他,请参考pv-Pipe Viewer

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36

对于Centos:yum install pv
Jonny


9

虽然大多数答案只是提到简单的命令

mysql -u database_user -p [db_name] <database_file.sql

今天,在此命令不足的情况下,数据库和表具有utf8-collat​​ion是很常见的。在导出的表中有utf8-collat​​ion,需要使用以下命令:

mysql -u database_user -p --default-character-set = utf8 [db_name] <database_file.sql

Surley也可以用于其他字符集,如何在此处显示正确的符号:

https://dev.mysql.com/doc/refman/5.7/zh-CN/show-collat​​ion.html

还有一条评论提到,如果数据库永远不存在,则必须首先创建一个空数据库。在某些情况下,这可能是正确的,但取决于导出文件。如果导出的文件已包含创建数据库的命令,则无需在单独的步骤中创建数据库,甚至可能导致导入错误。因此,建议在导入时首先查看文件中的内容,以了解其中包含哪些命令,在导出时,请注意设置,尤其是在文件很大且难以在编辑器中读取的情况下。

这里还列出并解释了该命令的更多参数:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

如果您使用其他数据库版本,请考虑搜索相应的手册版本。提到的链接是指MySQL 5.7版。


9

对于导出数据库:

mysqldump -u username -p database_name > file.sql

对于导入数据库:

mysql -u username -p database_name < file.sql

8

在Windows 7的WAMP上,从命令行(cmd)可以使用以下命令。

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql


7

我认为这对于使用Mac OS X的人可能有用:

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

替换xamppmamp或其他Web服务器。


6

有时,该数据库定义的端口以及服务器IP地址也很重要...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 

6

导入数据库:

mysql -u用户名-p数据库名</文件路径/文件名.sql

从数据库导出:

mysqldump -u用户名-p数据库名> /文件路径/文件名.sql

执行这些命令后,将提示您输入MySQL密码。


5

为了备份,制作一个BAT文件并使用Task Scheduler运行该BAT文件。它将备份数据库;只需复制以下行并粘贴到记事本中,然后保存.bat文件,然后在系统上运行它即可。

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql

5

以下步骤有助于上传 file.sql MySQL数据库。

第1步:上传file.sql.zip到任何目录并在其中解压缩
sudo apt-get install unzipsudo apt-get unzip file.sql.zip
第2步:现在,导航到该目录。例:cd /var/www/html

第三步: mysql -u username -p database-name < file.sql
输入密码,然后等待上传完成。


5

我一直遇到未创建数据库的问题。

我这样固定

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
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.