Мы выполняем ежедневное резервное копирование нашего сервера 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 частью имени файла, поскольку, как вы обнаружили, это просто создает путаницу.