Как точечно восстановить бекап БД сайта

  • Как точечно восстановить бекап БД сайта

    Антон Долганин 25 Июля 2014 20:23 1838
    Делайте бекап БД, всегда делайте. Даже когда кажется, что все замечудненько, попадется модуль, который все испортит.

    Но вот беда случилась, и бекап есть. Но все заливать не требуется, например похерились только определенные свойства элементов, или какая-то категория товаров. Как быть?

    Прежде всего загружаете старый бекап по соседству с боевым, чтобы боевой сайт мог к нему подконнектиться. И приступаем к написанию кода перегонки данных. Каждый раз подход индивидуальный. Но вот вы накидали алгоритм по выборке данных из «старого Битрикс» и загона его в новый. Мне тут проще было оперировать запросами, поэтому пример будет с ними.

    Все волшебство сводится к волшебной команде use, которую применяем два раза — при коннекте к старой базе и потом к новой.

    Получается как-то так:

    $arAll = array();
    //коннектимся к старой базе, забираем данные так, как-будто они находятся в текущем Битрикс
    $DB->Query('use db1507;');
    $rs = $DB->Query('SELECT * FROM `b_iblock_element_property` WHERE `IBLOCK_PROPERTY_ID`=455;');
    while ($ar = $rs->Fetch()) {
        $arAll[] = $ar;//подразумеваем, что массив данных вместится в один заход
    }
    //возвращаемся к старой (боевой) базе
    $DB->Query('use db;');
    foreach ($arAll as $ar) {
        //аккуратно инсертим
        $DB->Query('UPDATE `b_iblock_element_property` SET `VALUE`='.$ar['VALUE'].', `VALUE_ENUM`='.$ar['VALUE_ENUM'].' WHERE `ID`='.$ar['ID'].';');
        break;//при первом заходе вставляем break и проверяем правильно ли отработало, иначе винегрет еще сложнее разгребать :)
    }


    Повторю, скрипт не для боевого применения, а лишь как иллюстрация действий. Ну и стиль кодирования, именования и прочего не для применения, а так как надо было ASAP.
Алексей
1 Февраля 2016 8:58
А как на коробке Битрикс24 перегонять данные?
Например надо календари, сообщения, живую ленту перегнать, а так же CRM со всеми событиями (Лиды, сделки, события, звонки)
Так же файлы
Антон Долганин
1 Февраля 2016 20:45
Алексей, а что значит "перегнать"? Откуда куда?

А в целом принцип тот же. Да и я просто показал коннекты между двумя базами.