如何将sql.gz文件加载到数据库中?(输入)


150

我正在尝试将gzip压缩的SQL文件直接导入mysql。这是正确的方法吗?

mysql -uroot -ppassword mydb > myfile.sql.gz

14
即使忽略问题的gzip面,您的箭头也指向错误的方向……
Matt Fletcher

Answers:


238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>会将mysql命令的输出写到stdout文件中myfile.sql.gz,这很可能不是您想要的。另外,此命令将提示您输入MySQL用户“ root”的密码。


15
作为一种良好的安全措施,我会将密码放在命令行上,让mysql要求它。
莫里亚蒂教授

9
甚至更好:~/.my.cnf使用凭据创建。;)
joschi 2010年

5
作为@教授。Moriarty说明,您可以通过修改命令以不使用密码zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database。它将知道最后一个参数是您要使用的数据库,而不是密码。
bafromca 2015年

6
为了稍微纠正@ Prof.Moriarty的评论,一个好的安全实践是不要将我的密码放在命令行上(该密码将被存储在历史记录中,或者在您的肩膀上看到),然后让MySQL要求它。单独的-p标志将导致MySQL在提示时询问密码。
乔治,

4
+1使该死的数据库转储处于压缩状态
Dmitri DB

81

要在导入sql.gz文件时显示进度条,请下载pv并使用以下命令:

pv mydump.sql.gz | gunzip | mysql -u root -p

在CentOS / RHEL中,您可以使用安装pv yum install pv

在Debian / Ubuntu中apt-get install pv

在MAC中, brew install pv


2
pv似乎也存在于Ubuntu仓库中(至少是在12.04 LTS中),但是再次需要做sudo apt-get install pv才能得到它。感谢Banjer,这非常适合大型数据库导入!
toon81

我必须运行pv mydump.sql.gz | 拉链| mysql -u root my_database_name。那是因为我正在导入表,但没有为我的根用户设置密码
CristianoMendonça,2016年

在MAC,brew install pv
得分

54

最简单的方法是在导入之前解压缩数据库文件。也如@Prof所述。Moriarty,您不应该在命令中指定密码(系统会要求您输入密码)。从webcheatsheet获取的此命令将一次性解压缩并导入数据库:

gunzip < myfile.sql.gz | mysql -u root -p mydb

1
另外,需要在导入之前创建mydb。这不会为您创建数据库。
Siddhartha 2015年

我发现我gunzip在10GB压缩文件上的管道导致导入冻结。不知道这是由于内存限制还是其他原因,但是我将来会每次只做一步。
瑞安·塔克

@RyanTuck这推动了这类过程的极限:)
icc97

@Siddhartha这取决于sql转储文件。有时它们包括创建数据库语句。
rooby

@rooby很有道理。
Siddhartha


5

在macOS上,我使用了以下命令:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

输入您的密码,瞧!


4

还要检查SQL文件中是否有任何USE语句。如果在SQL文件中指定了其他目标,则在命令行中指定数据库并不能保证数据会在那里结束。


2
您只需要像这样扩展命令:pv mydump.sql.gz | gunzip | mysql -u root -p your_database。可接受的答案使用此方法。
bafromca 2015年

1

对于bzip2压缩文件(.sql.bz2),请使用:

bzcat <file> | mysql -u <user> -p <database>

要么

pv <file> | bunzip2 | mysql -u <user> -p <database>

查看进度条。


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.