Article ID: 1757, created on Jun 2, 2010, last review on May 10, 2014

  • Applies to:
  • Plesk

Симптомы

Как вручную извлечь веб-файлы, базы данных и другие объекты из резервной копии Plesk?

Решение

Эту задачу можно выполнить несколькими способами.

  1. Первый способ:

    Если файл дампа не очень большой, например 100-200 МБ, его можно распаковать и открыть с помощь любого локального почтового клиента. Пути доступа к дампу будут отображаться как вложения. Выберите и сохраните нужный, а затем распакуйте его.

  2. Второй способ:

    Воспользуйтесь инструментами mpack, предназначенными для работы с файлами MIME. Этот пакет включен в Debian:

    # apt-get install mpack
    

    В случае с другими системами Linux можно использовать RPM из ALT Linux:

    ftp://ftp.pbone.net/mirror/ftp.altlinux.ru/pub/distributions/ALTLinux/Sisyphus/files/i586/RPMS/mpack-1.6-alt1.i586.rpm

    или скомпилировать mpack из исходников: http://ftp.andrew.cmu.edu/pub/mpack/.

    Создайте пустую папку:

    # mkdir recover
    # cd recover
    

    и скопируйте в нее резервную копию. По умолчанию резервная копия Plesk упакована с помощью gzip (если нет, используйте cat), поэтому для извлечения содержимого папок из файла резервной копии вам нужно передать данные в munpack с помощью zcat:

    # zcat DUMP_FILE.gz > DUMP_FILE 
    # cat DUMP_FILE | munpack 
    

    В результате вы получите набор файлов tar и sql с папками и базами данных доменов. Распакуйте нужную папку. Например, если вам нужно восстановить папку httpdocs для домена DOMAIN.TLD:

    # tar xvf DOMAIN.TLD.htdocs
    

    ПРИМЕЧАНИЕ. Если размер файла превышает 2 ГБ, утилита 'munpack' может выдать следующую ошибку:

    # cat DUMP_FILE | munpack
    DOMAIN.TLD.httpdocs (application/octet-stream)
     File size limit exceeded
    

    В этом случае воспользуйтесь следующим способом.

  3. Третий способ:

    Сначала проверьте, упакован ли дамп в архив, и, если нужно, распакуйте его:

    # file testdom.com_2006.11.13_11.27
    testdom.com_2006.11.13_11.27: gzip compressed data, from Unix
    # zcat testdom.com_2006.11.13_11.27 > testdom.com_dump
    

    Дамп состоит из XML-пути, описывающего, что включено в дамп, и самих данных. Каждому фрагменту данных присвоен код содержимого (CID), который указан в XML-пути.

    Например, если домен имеет хостинг, то все пути, включенные в хостинг, будут указаны в следующем виде:

    <phosting cid_ftpstat="testdom.com.ftpstat" cid_webstat="testdom.com.webstat" cid_docroot="testdom.com.htdocs" cid_private="testdom.com.private"
    cid_docroot_ssl="testdom.com.shtdocs" cid_webstat_ssl="testdom.com.webstat-ssl" cid_cgi="testdom.com.cgi" errdocs="true">
    

    Если вы хотите извлечь папку 'httpdocs', вам нужно найти значение параметра 'cid_docroot' (в нашем случае это 'testdom.com.htdocs').

    Затем с помощью найденного кода CID необходимо вырезать содержимое папки 'httpdocs' из дампа. Для этого найдите номер строки, с которой начинается требуемое содержимое, и строки, которой оно заканчивается, например:

    # egrep -an '(^--_----------)|(testdom.com.shtdocs)' ./testdom.com_dump | grep -A1 "Content-Type"
    2023:Content-Type: application/octet-stream; name="testdom.com.shtdocs"
    3806:--_----------=_1163395694117660-----------------------------------------
    

    К номеру первой строки прибавьте 2, а из номера второй строки вычтите 1; затем запустите следующую команду:

    head -n 3805  ./testdom.com_dump | tail +2025  > htdocs.tar
    

    В результате вы получите tar-архив папки 'httpdocs'.

    Восстановление базы данных осуществляется по аналогичной схеме. Вам нужно найти XML-описание базы данных для нужного домена, например:

        <database version="4.1" name="mytest22" cid="mytest22.mysql.sql" type="mysql">
          <db-server type="mysql">
            <host>localhost</host>
            <port>3306</port>
          </db-server>
        </database>
    

    Найдите содержимое базы данных по коду CID:

    # egrep -an '(^--_----------)|(mytest22.mysql.sql)' ./testdom.com_dump | grep -A1 "Content-Type"
    1949:Content-Type: application/octet-stream; name="mytest22.mysql.sql"
    1975:--_----------=_1163395694117660-----------------------------------------
    

    К номеру первой строки прибавьте 2, а из номера второй строки вычтите 1; затем запустите следующую команду:

    head -n 1974  ./testdom.com_dump | tail +1951  > mytest22.sql 
    

    В результате вы получите базу данных в формате SQL.

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c

Email subscription for changes to this article
Save as PDF