在管道中使用时更改 gunzip 临时目录
Change gunzip temporary directory while used in pipe
背景
我正在使用具有这些硬盘分区的 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
。我认为这与具有足够 space 的 mysql
分区无关,而是与只有 2.4GB 可用空间的 /tmp
分区无关。
现在我确实继续将文件移动到有足够空闲 space 的 /var/lib/mysql
分区。将我的文件压缩到那里,然后开始 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
这有可能吗?我搜索了很多,但找不到任何可以解决这个特定需求的东西。
在环境变量 TMPDIR
中设置所需的临时目录(参见 https://en.wikipedia.org/wiki/TMPDIR)。
背景
我正在使用具有这些硬盘分区的 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
。我认为这与具有足够 space 的 mysql
分区无关,而是与只有 2.4GB 可用空间的 /tmp
分区无关。
现在我确实继续将文件移动到有足够空闲 space 的 /var/lib/mysql
分区。将我的文件压缩到那里,然后开始 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
这有可能吗?我搜索了很多,但找不到任何可以解决这个特定需求的东西。
在环境变量 TMPDIR
中设置所需的临时目录(参见 https://en.wikipedia.org/wiki/TMPDIR)。