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

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


评论

即使忽略问题的gzip面,您的箭头也指向错误的方向...

#1 楼

zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database
将在>上写入mysql命令的输出到文件stdout中,这很可能不是您想要的。另外,此命令将提示您输入MySQL用户“ root”的密码。

评论


作为一种良好的安全措施,我将密码放在命令行上,让mysql要求它。

–莫里亚蒂教授
2010年5月3日,8:19

甚至更好:使用凭据创建〜/ .my.cnf。 ;)

– joschi
2010年5月3日,10:46

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

–bafromca
15年1月20日,0:20

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

–乔治
16年8月3日在8:00

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

– Dmitri DB
17年1月12日在19:18

#2 楼

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

pv mydump.sql.gz | gunzip | mysql -u root -p <database name>


在CentOS / RHEL中,您可以使用yum install pv安装pv。 br />
在Debian / Ubuntu中apt-get install pv

在MAC中,brew install pv

评论


pv似乎也存在于Ubuntu仓库中(至少在12.04 LTS中是),但是再次需要执行sudo apt-get install pv来获取它。感谢Banjer,这非常适合大型数据库导入!

–toon81
2015年2月19日15:25

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

–克里斯蒂亚诺·门多萨(CristianoMendonça)
16-2-9在22:19



在MAC中,brew install pv

–分数
16年4月28日在19:30

#3 楼

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

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


评论


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

–悉达多
2015年4月20日23:00

我发现10 GB压缩文件上的管道Gunzip导致导入冻结。不知道这是否是由于内存限制或其他原因,但我将来会一次尝试一步。

–ryantuck
16年1月7日在16:42

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

–icc97
16年1月7日在19:37

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

–rooby
17年8月30日在22:55

@rooby很有道理。

–悉达多
17年9月1日在0:41

#4 楼

如果从zcat收到错误消息,其中错误消息包含带有额外后缀.Z的文件名,请尝试改用gzcat,如https://stackoverflow.com/questions/296717/zcat-wont-unzip-正确的文件

#5 楼

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

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


输入密码,瞧!

#6 楼

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

评论


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

–bafromca
2015年1月20日,0:17

#7 楼

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

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


OR

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


来查看进度栏。

#8 楼

您可以使用-c, --stdout, --to-stdout命令的gunzip选项

,例如:

gunzip -c file.sql.gz | mysql -u root -p database


#9 楼

要在.sql.qz中导出,命令是:-

mysqldump -u username -p database | gzip> database.sql.gz

要导入.sql.qz文件的命令是:-

gunzip
Shailesh Thapa

#10 楼

假设您需要使用mysql填充user_data,请尝试以下操作:

export DEBIAN_FRONTEND=noninteractive \
    apt-get update -yq
    dpkg -l | grep mysql-server || (echo "Installing MySQL..." \
    && apt-get install -yq mysql-server \
    && echo -e "\n[mysqld]\nbind-address=0.0.0.0\nskip-name-resolve=1" | tee -a /etc/mysql/my.cnf \
    && aws s3 cp --quiet s3://your-bucket/mysqldump_all_databases.sql.gz - | zcat | mysql -uroot\
    && systemctl restart mysql)


#11 楼

在MacOS上,除MySQL客户端本身外,我一直使用以下代码,无需安装其他程序。

$ cat /path/to/file.sql.gz | gzip -d | mysql -u root <db_name>


第一个命令cat,打印文件。其输出(文件内容)作为输入发送到下一个命令gzip。带有gzip选项的-d解压缩传递给它的输入并输出结果,该结果最终用作MySQL客户端mysql程序的输入。输出->输入发送是由bash和其他shell上的|(管道)运算符提供给我们的。

此脚本还可以在某些流行的Linux发行版中使用,例如Ubuntu。我不确定gzip是否始终可用。但是,如果没有安装,则可以轻松安装:

$ sudo apt install gzip