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

Posted

技术标签:

【中文标题】如何在 MySQL 中使用命令行导入 SQL 文件?【英文标题】:How do I import an SQL file using the command line in MySQL? 【发布时间】:2018-03-31 08:32:27 【问题描述】:

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

我有一个Windows Server 2008 R2 安装。我把.sql文件放在C盘上,我试过这个命令

database_name < file.sql

它不工作。我收到语法错误。

如何才能顺利导入此文件? 我需要先创建数据库吗?

【问题讨论】:

Restore mysql Dump File with Command Line的可能重复 ***.com/questions/11407349/…的可能重复 这些重复的家伙是怎么回事?这确实是一个有其目的的有用问题 @ValentinoPereira 你在确定重复的人之前检查过原始问题日期 在我检查了下面的所有答案之后,我必须说你错过了对于那些想要帮助的人来说非常重要的线索。当您将数据转储出数据库时,您未能指定确切的命令。 【参考方案1】:

试试:

mysql -u username -p database_name < file.sql

检查MySQL Options。

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

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

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

【讨论】:

【参考方案2】:

mysqldump 的常见用途是备份整个数据库:

mysqldump db_name > backup-file.sql

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

Unix

mysql db_name < backup-file.sql

Windows命令提示符下也是这样:

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

PowerShell

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

MySQL 命令行

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

【讨论】:

只有我一个从来没有在mysql中使用过&lt;操作符吗? (ubuntu18/20) 不知道为什么 Windows 示例包含参数 -u-p 而 Unix 示例没有。 mysql 的接口在两者上是相同的,因此您很可能在 Unix 中需要与此处为 Windows 提供的相同的命令。【参考方案3】:

转到您拥有 MySQL 的目录。

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

同样要转储所有数据库,使用-all-databases 选项,无需再指定数据库名称。

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

或者您可以使用一些 GUI 客户端(例如 SQLyog)来执行此操作。

【讨论】:

它是否适用于奇怪的破折号 (–) - 靠近 "all-databases"(也在第一版中)?【参考方案4】:

我们可以使用这个命令从命令行导入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
mysql -u root -p password bank < bank.sql

如果您在Project 目录中并且您的SQL 文件在Desktop 目录中。如果你想从Project 目录访问它,那么你可以这样做:

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

【讨论】:

-ppassword 之间不能有空格 日本。这是行不通的。正确的是mysql -u root -p"password" bank &lt; bank.sql 为什么你不能在一行中回答? mysql -u username -ppassword db_name &lt; file.sql 虽然这与此问题/答案完全无关,但当您使用非平凡的数据库时,最好不要以纯文本形式在同一命令中输入密码。不指定密码作为命令的一部分将提示您输入可以安全输入的密码 尤其是因为.bash_history【参考方案5】:

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

你只需要做以下事情:

mysql> use db_name;

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

【讨论】:

有没有办法在用于导入的 mysql 命令的单个命令行中做到这一点? 我同意这是最佳答案autocommit=0 部分在速度方面创造了天壤之别。 autocommit=0 可以处理更大的文件吗?比如 8gb 的 sql 文件。 并不总是需要关闭autocommit。值得在编辑器中检查数据库转储,它可能已经以 SET autocommit=0; 开头。 @Volomike echo "SET autocommit=0;";猫 db.sql;回声“提交;”; | mysql -u what -p - 用于 posix 兼容的命令行,不确定 windows【参考方案6】:
mysql --user=[user] --password=[password] [database] < news_ml_all.sql

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

导入数据库

    开车去:

     d:
    

    MySQL 登录

     c:\xampp\mysql\bin\mysql -u root -p
    

    它会要求密码。输入:

     pwd
    

    选择数据库

     use DbName;
    

    提供文件名

     \.DbName.sql
    

【讨论】:

在 Windows 上,大概?为什么一定要换驱动D:?文件DbName.sql 是否假定位于驱动器D: 的根目录?你能详细说明吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 问题/答案应该看起来像今天写的)。【参考方案9】:

添加--force option:

mysql -u username -p database_name --force < file.sql

【讨论】:

【参考方案10】:

出于备份目的,制作一个 BAT 文件并使用 Task Scheduler 运行此 BAT 文件。它将备份数据库;只需复制以下行并粘贴到 Notepad 中,然后保存 .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

【讨论】:

【参考方案11】:

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

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

【讨论】:

我认为,当您为您的意图添加一些解释时,这对 OP 和其他问题会更有帮助。 只有在 Windows 环境变量中定义了 mysql.exe 时才有效。如果没有,您应该键入 mysql.exe 文件的所有路径。你的语法是错误的。例如:“d:\wamp\bin\mysql\mysql5.5.8\bin\mysql.exe -u YOUR_USERNAME -p DB_NAME wpy.me/en/blog/…【参考方案12】:

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

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

xampp 替换为mamp 或其他网络服务器。

【讨论】:

【参考方案13】:

如果您在 Mac OS X 上使用 MAMP,这可能会有所帮助:

/applications/MAMP/library/bin/mysql -u MYSQL_USER -p DATABASE_NAME < path/to/database_sql/FILE.sql

MYSQL_USER 默认为 root。

【讨论】:

【参考方案14】:
    打开 MySQL 命令行 输入你的mysql bin目录的路径并按Enter 将您的 SQL 文件粘贴到 mysql 服务器的 bin 文件夹中。 在 MySQL 中创建数据库。 使用您要导入 SQL 文件的特定数据库。 键入source databasefilename.sql回车 您的 SQL 文件上传成功。

【讨论】:

输入你的mysql bin目录的路径并按下【参考方案15】:

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

第一步:将file.sql.zip上传到任意目录并解压注意sudo apt-get install unzipsudo apt-get unzip file.sql.zip 第 2 步:现在导航到该目录。示例:cd /var/www/html

第 3 步:mysql -u username -p database-name &lt; file.sql 输入密码,等待上传完成。

【讨论】:

【参考方案16】:

以下命令适用于我在命令行 (cmd) 上 WAMP 上的 Windows 7。

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.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:

REM 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

【讨论】:

【参考方案18】:

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

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

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

mysql -u username -p password < dump.sql

【讨论】:

【参考方案19】:

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

如果 .sql 文件中提到的数据库不存在,请确保您连接的是有权创建数据库的用户。

【讨论】:

【参考方案20】:

如果你的文件夹有多个 SQL 文件,并且你已经安装了Git Bash,你可以使用这个命令来导入多个文件:

cd /my-project/data

cat *.sql | /c/xampp/mysql/bin/mysql -u root -p 1234 myProjectDbName

【讨论】:

【参考方案21】:

导出特定数据库:

mysqldump --user=root --host=localhost --port=3306 --password=test -B CCR KIT > ccr_kit_local.sql

这将导出 CCR 和 KIT 数据库...

将所有导出的数据库导入特定的 MySQL 实例(您必须在转储文件所在的位置):

mysql --user=root --host=localhost --port=3306 --password=test < ccr_kit_local.sql

【讨论】:

【参考方案22】:

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

我是这样解决的:

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql

【讨论】:

【参考方案23】:

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

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

【讨论】:

但是still very slow(?). @PeterMortensen - 取决于数据的大小,否则通常很快。【参考方案24】:

对我有用的解决方案如下:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

【讨论】:

在将我的 sql 文件放入正确的 /bin 目录视图 Windows 资源管理器后,这对我使用 MySQL 命令行客户端有效。谢谢 有点慢但不会停在中间也不要说MySQL服务器已经消失了。【参考方案25】:

我认为值得一提的是,您还可以使用zcat 加载 gzipped(压缩) 文件,如下所示:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name

【讨论】:

【参考方案26】:

关于信息,我只是有默认的 root + 没有密码。它不适用于所有以前的答案。

我创建了一个具有所有权限和密码的新用户。成功了。

-ppassword 没有空格。

【讨论】:

【参考方案27】:

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

mysqldump -u username -p database_name > database_name.sql

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

mysql -u username -p database_name < database_name.sql

【讨论】:

【参考方案28】:

在命令行上提供凭据不是一个好主意。上面的答案很好,但忽略了

mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql

其中 etc/myhost.cnf 是一个包含主机、用户、密码的文件,您避免在命令行上暴露密码。这是一个示例,

[client]
host=hostname.domainname
user=dbusername
password=dbpassword

【讨论】:

命令行是不稳定的(除非你有键盘记录器或背后的人我希望它在本地执行时是安全的),而文件是永久性的,因此应该是更高的风险,尤其是。当它是纯文本时 ...但是,mysql 命令确实会发出警告“mysql: [警告] 在命令行界面上使用密码可能不安全。”【参考方案29】:

我正在使用带有 PowerShell 5 的 Windows 10,我发现几乎所有“类 Unix”的解决方案都不适合我。

> mysql -u[username] [database-name] < my-database.sql
At line:1 char:31
+ mysql -u[username] [database-name] < my-database.sql
+                               ~
The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

我最终使用了这个命令:

> type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]

而且效果很好,希望对您有所帮助。

感谢@Francesco Casula 的answer,顺便说一句。

【讨论】:

【参考方案30】:

类似于vladkras's answer to How do import an SQL file using the command line in MySQL?

对我来说主要区别:

    数据库必须先存在 -p 和密码之间没有空格

shell> mysql -u root -ppassword #note: no space between -p and password
mysql> CREATE DATABASE databasename;
mysql> using databasename;
mysql> source /path/to/backup.sql

我正在使用 MariaDB 运行 Fedora 26。

【讨论】:

但这不是来自命令行的问题精神。它以交互方式使用 MySQL shell。

以上是关于如何在 MySQL 中使用命令行导入 SQL 文件?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在mysql shell命令中执行sql命令行

mysql命令行工具如何执行脚本文件?

mysql文件sql大容量怎么导入

mysql如何导入sql文件

如何把TXT文件数据导入MySQL数据库