【问题标题】:Change gunzip temporary directory while used in pipe在管道中使用时更改 gunzip 临时目录
【发布时间】:2016-06-14 12:58:19
【问题描述】:

背景

我正在使用这些硬盘分区的 mysql 服务器:

...
/dev/vdd       99G     58G   39G   61% /var/lib/mysql
tmpfs         2,4G       0  2,4G    0% /tmp
...

我需要将 mysql 转储导入我的数据库。因此我使用以下语法:

gunzip -c sql_dump.sql.gz | mysql -uDB_USER -p DB_NAME

一般来说这是可行的,但我的sql_dump.sql.gz 文件在提取时将超过 5GB。

上面的命令将失败并显示gzip: /home/.../sql_dump.sql.gz: No space left on device。我认为这与有足够空间的mysql 分区无关,而与只有2.4GB 可用空间的/tmp 分区有关。

现在我确实将文件移动到有足够可用空间的/var/lib/mysql 分区。 gunzip 我的文件在那里,启动 mysql 导入,然后删除压缩和未压缩的文件。

问题

我在问自己是否有任何方法可以强制gunzip 临时更改默认的临时目标位置,默认情况下为/tmp/。这样gunzip -c sql_dump.sql.gz | ... 在提取文件时不会将提取的文件存储在/tmp/ 下,而是在/var/lib/mysql 下。像这样的:

export "GZIP_TMP_DIR=/var/lib/mysql/"
gunzip -c sql_dump.sql.gz | mysql -uDB_USER -p DB_NAME

这甚至可能吗?我搜索了很多,但找不到任何可以解决这个特定需求的东西。

【问题讨论】:

    标签: linux temporary-files gunzip


    【解决方案1】:

    在环境变量TMPDIR(见https://en.wikipedia.org/wiki/TMPDIR)中设置所需的临时目录。

    【讨论】:

    • 您能详细说明这是为什么吗?我的 HPC 管理员也给了我这个修复,但我无法找到关于 gzip/gunzip 为何/如何使用 $TMPDIR 的简单解释,特别是因为您可以看到正在输出的文件(不是真的?) 实时的。
    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多