+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


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

Делайте бекап БД, всегда делайте. Даже когда кажется, что все замечудненько, попадется модуль, который все испортит.

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

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

Все волшебство сводится к волшебной команде use, которую применяем два раза - при коннекте к старой базе и потом к новой.
Получается как-то так:
$arAll = array();
//коннектимся к старой базе, забираем данные так, как-будто они находятся в текущем Битрикс
$DB->Query('use db1507;');
$rs = $DB->Query('SEL ECT * FR OM `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('UPD ATE `b_iblock_element_property` SE T `VALUE`='.$ar['VALUE'].', `VALUE_ENUM`='.$ar['VALUE_ENUM'].' WHERE `ID`='.$ar['ID'].';');
   break;//при первом заходе вставляем break и проверяем правильно ли отработало, иначе винегрет еще сложнее разгребать :)
}

Повторю, скрипт не для боевого применения, а лишь как иллюстрация действий. Ну и стиль кодирования, именования и прочего не для применения, а так как надо было ASAP.

Назад в раздел

Подписаться на новые материалы раздела:














CAPTCHA