我有一个.sql文件,从phpMyAdmin导出。我想使用命令行将其导入其他服务器。
我安装了Windows Server 2008 R2。我把.sql文件放在c驱动器上,并尝试了这个命令
1
| database_name < file.sql |
它不起作用了,我有语法错误。
- 如何导入此文件而不出现问题?
- 是否需要先创建数据库?
- 可能与命令行中的restore mysql dump文件重复
- stackoverflow.com/questions/11407349/&hellip;的可能副本
- 这些重复的家伙怎么了?这确实是一个有其目的的有用问题
尝试:
1
| mysql -u username -p database_name < file.sql |
检查mysql选项。
注1:最好使用SQL文件EDOCX1的完整路径(0)。
注2:使用-R和--triggers保留原数据库的例程和触发器。默认情况下不会复制它们。
注3:如果(空)数据库不存在,并且导出的SQL不包含CREATE DATABASE(使用--no-create-db或-n选项导出),则可能需要从mysql中创建(空)数据库才能导入。
- 当我从类似toad的程序中运行文件时,我没有得到任何错误,但是当我从命令行中运行文件时,我得到了我提到的错误。
- 我想我们必须以Linux根用户的身份运行这个命令。
- 这与OS用户无关,所以不需要linux根用户,username只需要mysql中的create database权限。
- 注意,是的,如果(空的)数据库不存在,您必须从MySQL中创建它,然后才能导入它。
- 如何执行此命令,但限制行数?
- @用户3383675我认为没有限制行数的选项。您可能需要修改SQL文件或创建一个只包含所需行的新文件。
- 但由于文件的字符集或编码比较复杂,可能会导致执行失败。
- @除非后面有不需要的人,或者您忘记在命令前面添加一个空格符号,这样它就不会出现在bash历史中,否则输入bansi是可以的。
- 是的,记住从MySQL控制台创建一个空数据库(如果数据库以前不存在的话):CREATE DATABASE db-name;。
- 一定要检查备份文件中是否没有"使用‘原始数据库’"。虽然我指定了restore to new db"my sql new_db
- 为什么最好键入SQL文件的完整路径?
- @JX12345不是这样的,MySQL在执行shell重定向时甚至从未看到文件名。相反,您应该使用来自另一个答案的source命令。
- @除非您使用交互shell或模拟shell,否则walf source命令将无法工作。如果您对SQL文件具有读取权限,则shell重定向可在所有标准操作系统上工作。
- @jx12345如果不指定完整路径,mysql将在当前目录(mysql命令的启动位置)中查找sql文件。
- 为我工作,但我必须包含一个密码(因为我的根目录有一个密码)。只有当我在用户和-u之间没有空间,密码和-p之间没有空间时,它才似乎有效。像这样的东西
- @乔,是的,如果您在"-p"和"password"之间有一个空格,它会认为"password"是数据库名称。或者,您可以在不输入密码的情况下键入"-p",然后在按Enter键时会提示您输入密码。
- 如果我忘记设置数据库或表,如何停止操作?
- 你可以发送SIGINT(Ctrl + C)来停止中间的进程,根据我的经验,mysql总是能很好地处理这些信号。但请注意,如果SQL不在事务中,则数据库可能有部分数据。
- 如果您的字符集是utf8,建议包括--default-character-set=utf8,否则可能会发生不好的事情。
- 如果尚未创建数据库,则可以运行mysql -u username -p -e 'create schema databasename',et voila。
- 如果文件路径有空间,请不要忘记在其周围加双引号。
mysqldump通常用于备份整个数据库:
1
| shell> mysqldump db_name > backup-file.sql |
您可以这样将转储文件加载回服务器:
UNIX
1
| shell> mysql db_name < backup-file.sql |
在Windows命令提示中相同:
动力壳
1
| C:\> cmd.exe /c"mysql -u root -p db_name < backup-file.sql" |
mysql命令行
1 2
| mysql > use db_name ;
mysql > source backup -file.sql ; |
- @迈克,你想在mysql>命令行中启动它吗?你应该用贝壳代替。
- 如何使用shell?我在Windows Server 2008上使用mysql5.6
- 使用Windows PowerShell键入mysql db_name
- 杰基向& cmd.exe /c"mysql -u root -p Tutorials < tut_backup.sql"提出建议
- +1不必使用mysqlimport…很遗憾,我刚安装了MySQL客户端…我知道有更好的方法。
- 使用>将mysqldump输出重定向到文件时要小心,尤其是在希望控制编码的情况下。相反,您可能希望使用--result文件参数,以便编码不受shell/OS控制。
- 我从来没有想过用这种最简单的方法来恢复MySQL中的数据库(1.5GB)。谢谢你的分享
- 感谢您在mysql提示下显示命令source。
- mysql命令行适用于我。谢谢你的帮助。
关于导入大文件所花费的时间:最重要的是,mysql的默认设置是autocommit = true,所以需要更多的时间。在导入文件之前,您必须设置该选项,然后检查导入是如何像宝石一样工作的。
您只需执行以下操作:
1 2 3
| mysql > use db_name ;
mysql > SET autocommit =0 ; source the_sql_file.sql ; COMMIT ; |
- 在用于导入的mysql命令的单个命令行中是否有这样的方法?
- 最佳答案。这是我忘记的江户十一〔五〕令。我们中的大多数人都希望在以独立命令登录时完成这项工作,而不是在google serps顶部使用标准的login>inject>logout oneliner。
- 我同意这是最好的答案。autocommit=0部分在速度方面有很大的差异。
- autocommit=0是否可以处理更大的文件?像8GB的SQL文件。
- 不一定总是要关闭autocommit。值得在编辑器中检查数据库转储,它可能已经从SET autocommit=0;开始。
- 程序和触发器呢?
在所有答案中,对于上述问题,这是最好的答案:
1 2
| mysql > use db_name ;
mysql > source file_name.sql ; |
- 上面的advice失败,错误是db已经存在,但这似乎有效
我们可以使用此命令从命令行导入SQL:
1
| mysql -u username -p password db_name < file.sql |
例如,如果用户名是root,密码是password。数据库名为bank,SQL文件为bank.sql。然后,简单地这样做:
1
| mysql -u root -p password bank < bank.sql |
记住您的SQL文件在哪里。如果您的SQL文件在Desktop文件夹/目录中,则转到桌面目录并输入如下命令:
1 2
| ~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql |
如果您在Project目录中,而您的SQL文件在Desktop目录中。如果您想从Project目录访问它,那么可以这样做:
1
| ~/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。
打开mysql命令行
键入mysql bin目录的路径,然后按enter
将您的SQL文件粘贴到mysql server的bin文件夹中。
在MySQL中创建数据库。
使用要导入SQL文件的特定数据库。
source databasefilename.sql和enter型
您的SQL文件上载成功。
如果数据库已经存在,请使用以下命令导入dump或sql文件
1
| mysql -u username -p database_name < file.sql |
如果您不需要在mysql中创建相关的数据库(空),那么为了第一次登录到MySQL控制台,可以在终端或cmd中运行以下命令
提示时提供密码。
接下来创建一个数据库并使用它
然后将sql或dump文件从导入数据库
1
| mysql> source pathToYourSQLFile; |
注意:如果您的终端不在dump或sql文件所在的位置,请使用上面的相对路径。
对我有效的解决方案如下:
1 2
| Use your_database_name ;
SOURCE path_to_db_sql_file_on_your_local ; |
- 在将我的SQL文件放入正确的/bin目录视图Windows资源管理器之后,使用my sql命令行客户机对我很有用。谢谢
- 有点慢,但不会停在中间,不要说mysql服务器已经消失了。
转到mysql可执行文件所在的目录。-u表示用户名,-p表示提示输入密码:
1
| C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql |
- 我认为当你对你的意图加上一些解释的时候,它会对行动和进一步的问题更有帮助。
- 只有在Windows环境变量中定义了mysql.exe,这才有效。如果不是,则应键入mysql.exe文件的所有路径。你的语法是错误的。例如:"d:wampinmysqlmysql5.5.8inmysql.exe-u您的用户名-p dbame
要导入单个数据库,请使用以下命令。
1
| mysql -u username -p password dbname < dump.sql |
要导入多个数据库转储,请使用以下命令。
1
| mysql -u username -p password < dump.sql |
- mysql-u username-p password
要将数据库转储到SQL文件中,请使用以下命令
1
| mysqldump -u username -p database_name > database_name.sql |
将SQL文件导入数据库(确保您与SQL文件在同一目录中,或提供文件的完整路径)
1
| mysql -u username -p database_name < database_name.sql |
我认为值得一提的是,您还可以使用zcat加载gzip(压缩)文件,如下所示:
1
| zcat database_file.sql.gz | mysql -u username -p -h localhost database_name |
导入架构的最简单方法:
登录mysql并发布下面提到的命令。
1 2 3
| mysql > use your_db_name ;
mysql > source /opt /file.sql ; |
- 这将在不使用"use"命令的情况下对其中包含multilpe db的转储有效。
- 我试图从一个同名但结构相同的数据库中导入一个转储文件,但作者选择的正确答案无效,它在转储文件中创建了一个以数据库命名的新数据库。这个答案是我想要的,谢谢你
- 伟大的!正是我要找的!
要同时导入多个SQL文件,请使用以下命令:
1 2
| # Unix-based solution
for i in *.sql ;do mysql -u root -pPassword DataBase < $i ;done |
对于简单导入:
1 2
| # Unix-based solution
mysql -u root -pPassword DataBase < data.sql |
对于WAMP:
1 2
| #mysqlVersion replace with your own version
C:\wamp\ bin\mysql\mysqlVersion\ bin\mysql.exe -u root -pPassword DataBase < data.sql |
XAMPP:
如果.sql文件包含CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句,则不需要在命令行上指定数据库的名称。
如果.sql文件中提到的数据库不存在,请确保您正在与具有创建数据库权限的用户连接。
导入数据库
开车去:
MySQL登录
1
| command: c:\xampp\mysql\ bin\mysql -u root -p |
它需要密码。输入:
选择数据库
提供文件名
增加--force选项:
1
| mysql -u username -p database_name --force < file.sql |
使用mysql帮助获取详细信息mysql --help。
我认为在我们的背景下,这些将是有用的选择
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [~]$ 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。其他,请参阅http://www.ivarch.com/programs/pv.shtml。
1 2 3 4 5
| 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 |
转到mysql所在的目录。
1 2
| c:\mysql\ bin\ > mysql -u username -p password database_name <
filename.sql |
另外,要转储所有数据库,请使用-all-databases选项,并且不再需要指定数据库的名称。
1
| mysqldump -u username -ppassword –all -databases > dump.sql |
或者您可以使用一些GUI客户机(如sqlyog)来执行此操作。
以下命令在上的命令行(cmd)中对我有效Wamp上的Windows 7。
1
| d: /wamp /bin/mysql /mysql5.6.17 /bin/mysql.exe -u root -p db_name < database.sql |
我认为它可能对那些使用Mac OS X的用户有用:
将xampp替换为mamp或其他Web服务器。
这里的大多数答案只提到简单的命令
mysql -u database_user -p [db_name] < database_file.sql
今天,数据库和表具有utf8排序规则是很常见的,而这个命令还不够。在导出的表中使用utf8排序规则时,需要使用以下命令:
mysql -u database_user -p --default-character-set=utf8 [db_name] < database_file.sql
Surley这也适用于其他字符集,这里可以看到如何显示正确的符号:
https://dev.mysql.com/doc/refman/5.7/en/show-collation.html
一条注释还提到,如果数据库从未存在,则必须首先创建一个空数据库。这在某些情况下可能是正确的,但取决于导出文件。如果导出的文件已经包含创建数据库的命令,那么就不必在单独的步骤中创建数据库,这甚至可能导致导入时出错。因此,在导入时,最好先查看文件以了解其中包含哪些命令;在导出时,最好注意设置,尤其是当文件非常大并且在编辑器中难以读取时。
这里列出并解释了命令的更多参数:
https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html
如果您使用另一个数据库版本,请考虑搜索相应版本的手册。上面提到的链接是指MySQL5.7版本。
出于备份目的,请生成一个BAT文件,并使用任务计划程序运行此BAT文件。它将备份数据库;只需复制以下行并粘贴到记事本中,然后保存.bat文件,然后在系统上运行它。
1 2 3 4 5 6 7 8
| @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 |
在命令行上提供凭据不是一个好主意。以上答案很好,但忽略了
1
| mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql |
其中,etc/myhost.cnf是一个包含主机、用户、密码的文件,您可以避免在命令行上暴露密码。这是一个样品,
1 2 3 4
| [client ]
host =hostname.domainname
user=dbusername
password=dbpassword |
- 不过,命令行是不稳定的(除非你背后有一个键盘记录器或一个人,我希望在本地执行时它是安全的),而文件是永久的,因此风险更高,尤其是在纯文本文件中。
- …但是,mysql命令确实警告"mysql:[警告]在命令行界面上使用密码可能不安全。"
有时定义的端口以及该数据库的服务器IP地址也很重要…
1
| mysql -u user -p user -h <Server IP > -P <port > (DBNAME ) < DB.sql |
我一直遇到一个没有创建数据库的问题。
我是这样修的
1 2
| mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql |
类似于https://stackoverflow.com/a/17666285/1888983
我的主要区别:
数据库必须首先存在
-p和密码之间没有空格
1 2 3 4
| 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。
我将Windows10与PowerShell5结合使用,发现几乎所有"类Unix"解决方案都不适合我。
1 2 3 4 5 6 7
| > 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 |
我最终使用了这个命令。
它工作得很好,希望能有所帮助。
感谢@francesco casula的回答。
关于我刚刚使用的默认根+和outpassword的信息,它不适用于以上所有的答案。
以下步骤有助于将file.sql上载到mysql数据库。
第一步:上传file.sql.zip到任意目录,解压注:sudo apt-get install unzip。:sudo apt-get unzip file.sql.zip。步骤2:现在导航到该目录。示例:cd /var/www/html。
第三步:mysql -u username -p database-name < file.sql。输入密码并等待上载完成。
导入数据库:
mysql -u username -p database_name < /file path/file_name.sql
从数据库导出:
mysqldump -u username -p database_name > /file path/file_name.sql
在这些命令之后,提示将询问您的MySQL密码
您可以尝试此查询。
出口:
1
| mysqldump -u username – -password=your_password database_name > file.sql |
进口:
1
| mysql -u username – -password=your_password database_name < file.sql |
以及以下链接的详细信息:
https://chartio.com/resources/tutorials/importing-from-and-exporting-to-files-using-the-mysql-command-line/
如果将数据导入Docker容器,请使用以下命令。调整用户(-u)、数据库(-d)、端口(-p)和主机(-h)以适合您的配置。
1
| mysql -u root -D database_name -P 4406 -h localhost --protocol=tcp -p < sample_dump.sql |
- 我需要提到主机名,因为在我的例子中,localhost不是db主机名。所以这个语法帮助了我。投票表决。
如果您在Mac OS X上使用MAMP,这可能会有所帮助:
1
| /applications /MAMP /library /bin/mysql -u MYSQL_USER -p DATABASE_NAME < path /to/database_sql /FILE.sql |
mysql_用户默认为根用户。
导出特定数据库:
1
| djimi: > mysqldump --user=root --host =localhost --port =3306 --password=test -B CCR KIT > ccr_kit_local.sql |
这将导出CCR和KIT数据库…
将所有导出的数据库导入到特定的MySQL实例(必须是转储文件所在的位置):
1
| djimi: > mysql --user=root --host =localhost --port =3306 --password=test < ccr_kit_local.sql |
例如
我在C:\xampp\mysql\bin上安装了软件我的档案在C:\Users\file.sql号地址。
刚刚设置了username和database_name。
注:首先,您需要手动创建数据库(database_name)
运行此命令:
cd C:\xampp\mysql\bin && mysql -u username -p database_name < C:\Users\file.sql
然后输入密码??
在Windows中,可以使用下面的命令从SQL转储导入数据
c:program filesmysqlmysql server 5.7in>mysql-u<>-p<>dbname其中-u后跟用户名,-p后跟mysql密码。在命令中可以跳过密码,因为可以在提示时输入密码。
你可以使用:
1
| mysql -u<user> -p<pass> <db> < db.sql |
例子:
1
| mysql -uroot -proot db < db.sql |
再见!
如果文件夹中有多个SQL文件,并且安装了Git Bash,则可以使用此命令导入多个文件:
1 2 3
| cd /my -project /data
cat *.sql | /c /xampp /mysql /bin/mysql -u root -p 1234 myProjectDbName |
如果要导入到本地数据库服务器,可以执行以下操作:
1
| mysql -u database_user -p < database_file.sql |
对于远程数据库服务器,请执行以下操作:
1
| mysql -u database_user -p -h remote_server_url < database_file.sql |