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

Ale*_*lex 192 mysql database gzip import

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

mysql -uroot -ppassword mydb > myfile.sql.gz
Run Code Online (Sandbox Code Playgroud)

jos*_*chi 316

zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database
Run Code Online (Sandbox Code Playgroud)

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

  • 作为一种良好的安全做法,我会将我的密码放在命令行上,我会让 mysql 询问它。 (18认同)
  • 甚至更好:使用凭据创建`~/.my.cnf`。;) (14认同)
  • 作为@Prof。Moriarty 解释说,你可以通过`zcat /path/to/file.sql.gz | 修改命令不使用密码。mysql -u 'root' -p your_database`。它会知道最后一个参数是您希望使用的数据库,而不是您的密码。 (9认同)
  • 为了稍微更正@Prof.Moriarty 的评论,一个好的安全做法是*不* 将我的密码放在命令行上(它将被存储在历史记录中,或者在您的肩膀上看到),并让 MySQL 要求它。单独的 -p 标志会导致 MySQL 在提示时询问密码。 (8认同)
  • +1 表示该死的数据库转储被压缩 (8认同)
  • 如果你遇到 `zcat` 的问题,你也可以试试 `gzcat`。在我的 MacBook 上,我遇到了错误:`zcat: can't stat: file.sql.gz (file.sql.gz.Z): No such file or directory` (4认同)
  • 这在 mac 上会令人窒息,因为无论出于何种原因,OSX 总是在文件名后附加一个 `.Z`。你可以使用 `gunzip -c` 代替 `zcat`,它工作正常。 (2认同)

Ban*_*jer 106

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

pv mydump.sql.gz | gunzip | mysql -u root -p <database name>
Run Code Online (Sandbox Code Playgroud)

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

在 Debian/Ubuntu 中apt-get install pv

在 MAC 中, brew install pv

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

icc*_*c97 67

最简单的方法是在导入前解压数据库文件。也正如@Prof所提到的Moriarty你不应该在命令中指定密码(你会被要求输入密码)。取自webcheatsheet 的这个命令将一次性解压并导入数据库:

gunzip < myfile.sql.gz | mysql -u root -p mydb
Run Code Online (Sandbox Code Playgroud)

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

小智 18

如果您收到来自 的错误zcat,其中错误消息包含带有额外后缀的文件名.Z,请尝试使用gzcat,如/sf/ask/20770221/ 所述


小智 6

在 macOS 上,我使用了这个:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]
Run Code Online (Sandbox Code Playgroud)

输入您的密码,瞧!


小智 5

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

例如:

gunzip -c file.sql.gz | mysql -u root -p database
Run Code Online (Sandbox Code Playgroud)