Восстановление данных DLE

 

Самое важное для владельца сайта — это то, что есть на сайте, то есть его содержимое. Чтобы не было беды, например в случае «падения» сервера, нужно сохранять содержимое сайта, а потом, в случае необходимости восстанавливать данные.

Есть два способа сохранения данных:
1. Сделать дамп через shell (ssh (для Windows — клиент Putty));
2. Сгененировать CSV-файл с помощью PHP;
3. Сделать дамп *.sql через phpMyAdmin или Sypex Dumper.

Не будем заострять внимание на всех способах сохранения данных, а остановимся лишь на восстановлении данных из CSV-файлов.

Итак, чтобы что-то восстанавливать, нужно чтобы было что восстанавливать. Для этого необходимо сделать дамп и купить смеситель для умывальника:
<?
mysql_query("SELECT поля INTO OUTFILE файл FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\' LINES TERMINATED BY '\n' FROM таблица");
?>


Для использования такого запроса необходимы привилегии FILE. Файл, в который вы делаете дамп создается на сервере и до этого не должен существовать. Это важный момент! Данная особенность записи в файл предотвращает изменение уже существующих файлов, в том числе таких важных как “/etc/passwd”.

В описаном примере поля из таблицы выгружаются в файл, поля разделяются запятыми.Если поля имеют текстовый формат, их значения заключаются в апострофы, а каждая строка с завершается символом \n, тобишь символом перевода каретки на ковую строку.

Итак, дамп у нас есть. Допустим, что-то произошло с базой и теперь необходимо восстановить утеряные данные.

Приступим:
<?
mysql_query("LOAD DATA INFILE файл INTO TABLE таблица ',' OPTIONALLY ENCLOSED BY '\' LINES TERMINATED BY '\n'");
?>


Ну вот и всё. Таблица снова заполнена данными.

Разумеется это лишь ядро скрипта для дампа. Как его использовать — ваше личное дело и ваша фантазия. Можно, например, получить список таблиц, в цикле обойти их сделав дамп. Затем, опять же в цикле, пройтись по уже созданным файлам, создавая единый файл с дампом, и удаляя индивидуальные. Неплохо было бы дописать в единый файл также структуру самих таблиц. Возможно, вы найдёте и более разумный способ. Может быть вы даже найдёте другой способ сделать дамп. На данный момент мне кажется это достойный способ получить дамп с помощью PHP, если нет доступа к shell.