我们每天备份 MySQL 服务器。使用以下脚本:
[ ! -d "${DEST}" ] && mkdir -p "${DEST}"
FILE=${DEST}/mysql-live.${NOW}-$(date +"%T").tar.gz.bz2
# get around error
mysqldump --single-transaction -u $MUSER -h $MHOST -p$MPASS DB | bzip2 -k -v > $FILE
现在,当我尝试使用 tar xvjf 进行提取时,我收到错误。它将使用 bunzip2 解压为 tar.gz 文件,但当我尝试使用 tar xvf、xzvf、gunzip 进行提取时,它显示的不是 gzip 存档。但是,如果我尝试将其重命名为 tar,它将显示不是 tar 存档。
我有点困惑,因为我没有其他选择,如果有人有什么想法的话。那就太棒了。它在 CentOS 上。
答案1
您的命令
mysqldump --single-transaction -u $MUSER -h $MHOST -p$MPASS DB | bzip2 -k -v > $FILE
说转储数据库并将输出通过管道传输到 bzip2,它应该将其标准输出写入 $FILE。
stdin 的内容将被压缩并写入例如 a.tar.gz.bz2。这不会创建 tar 存档或 gzip 压缩的 tar 存档 (.tar.gz),而只会创建一个名称令人困惑的 .bz2 压缩存档。
当你尝试提取档案内容(原因不明)时,你尝试使用 tar 实用程序,但意外地收到一条错误消息,可能是类似
tar -xvjf a.tar.gz.bz2
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
这是正确的,因为该文件不是 bzip 压缩的 gzip 压缩的 tar 存档。你可能需要类似
bunzip a.tar.gz.bz2
由于您没有生成 tar 存档或 gzip 压缩存档,因此您可能不应该将 .tar.gz 作为文件名的一部分,因为您发现这只会造成混淆。