Как точечно восстановить бекап БД сайта
Делайте бекап БД, всегда делайте. Даже когда кажется, что все замечудненько, попадется модуль, который все испортит.
Но вот беда случилась, и бекап есть. Но все заливать не требуется, например похерились только определенные свойства элементов, или какая-то категория товаров. Как быть?
Прежде всего загружаете старый бекап по соседству с боевым, чтобы боевой сайт мог к нему подконнектиться. И приступаем к написанию кода перегонки данных. Каждый раз подход индивидуальный. Но вот вы накидали алгоритм по выборке данных из "старого Битрикс" и загона его в новый. Мне тут проще было оперировать запросами, поэтому пример будет с ними.
Все волшебство сводится к волшебной команде 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.
Назад в раздел