我创建了 mysqldump 来创建 tar 存档,但每次我都收到通知
tar: Cowardly refusing to create an empty archive
正常使用gzip
创建的档案但tar
我无法继续前进。
mysqldump --all-databases --single-transaction --quick --lock-tables=false > /var/thg/vmest/full-backup-$(date +%F).sql \
| tar -czvf /var/thg/vmest/full-backup-$(date +%F).sql.tar.gz
答案1
这里有两个问题。
首先,您要将输出重定向(>
)mysqldump
到文件,因此没有任何内容可以tar
通过管道(|
)。
但即使你将数据传递给tar
,它也不会起作用。 的常见用途tar
是:
- 读取文件并创建存档(
tar -cf archive.tar foo bar
)。 - 读取文件并写入标准输出(
tar -cf - foo bar
)。 - 读取档案并提取,即创建文件(
tar -xf archive.tar
)。 - 读取标准输入并提取,即创建文件(
tar -xf -
)。
没有从 stdin 读取并创建存档的模式。 的全部目的tar
是打包文件变成单身的文件或流,因此稍后可以重新创建单独的文件。从技术上讲,你可以将一个文件打包到 tar 存档中,有时这是合理的:
- 当您想将文件及其权限、所有权等存储在一个不支持这些功能的文件系统上时;
tar
将存储元数据; - 当它是常规,你总是用于
tar
存储文件,但在这一天只有一个文件需要存储;没有必要为这种边缘情况破例。
将流打包到 tar 存档或流中没有任何好处,也没有任何意义。只需将原始流保存到文件中或进一步传递即可。tar
在这种情况下,真的没有工作可做。
我知道你想压缩流。将它传递给gzip
你需要的是:
mysqldump --all-databases --single-transaction --quick --lock-tables=false | gzip -c > /var/thg/vmest/full-backup-$(date +%F).sql.gz