Назад | Перейти на главную страницу

Невозможно распаковать tar.gz.bz2

Мы выполняем ежедневное резервное копирование нашего сервера 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.

Ваша команда

mysqldump --single-transaction -u $MUSER -h $MHOST -p$MPASS DB | bzip2 -k -v > $FILE

говорит: сбросить базу данных и передать вывод в bzip2, который должен записать его стандартный вывод в $ FILE.

Содержимое stdin будет сжато и записано, например, в a.tar.gz.bz2. Это не создает ни tar-архив, ни tar-архив, сжатый gzip (.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

Это правильно, потому что файл не является архивом tar, сжатым с помощью bzip. Вам, наверное, понадобится что-то вроде

bunzip a.tar.gz.bz2

Поскольку вы не создаете ни tar-архив, ни архив, сжатый gzip, вам, вероятно, не следует делать .tar.gz частью имени файла, поскольку, как вы обнаружили, это просто создает путаницу.