运行 mysqldump 创建 tar 存档时出错

运行 mysqldump 创建 tar 存档时出错

我创建了 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是:

  1. 读取文件并创建存档(tar -cf archive.tar foo bar)。
  2. 读取文件并写入标准输出(tar -cf - foo bar)。
  3. 读取档案并提取,即创建文件(tar -xf archive.tar)。
  4. 读取标准输入并提取,即创建文件(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

相关内容