如何在 MySQL 中使用命令行导入 SQL 文件?
Posted
技术标签:
【中文标题】如何在 MySQL 中使用命令行导入 SQL 文件?【英文标题】:How do I import an SQL file using the command line in MySQL? 【发布时间】:2013-07-14 00:37:58 【问题描述】:我有一个从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中使用过<
操作符吗? (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
【讨论】:
-p
和 password
之间不能有空格
日本。这是行不通的。正确的是mysql -u root -p"password" bank < bank.sql
为什么你不能在一行中回答? mysql -u username -ppassword db_name < file.sql
虽然这与此问题/答案完全无关,但当您使用非平凡的数据库时,最好不要以纯文本形式在同一命令中输入密码。不指定密码作为命令的一部分将提示您输入可以安全输入的密码
尤其是因为.bash_history
【参考方案5】:
关于导入大文件所花费的时间:最重要的是,由于MySQL的默认设置为autocommit = true
,因此需要更多时间。您必须在导入文件之前将其关闭,然后检查导入的工作原理。
你只需要做以下事情:
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 unzip
:sudo apt-get unzip file.sql.zip
第 2 步:现在导航到该目录。示例:cd /var/www/html
第 3 步:mysql -u username -p database-name < 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_name
和USE 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章