Ошибка: Failed to parse the Currency Converter XML document.
$1 603.45


Ошибка: Failed to parse the Currency Converter XML document.
$1 603.45


Ошибка: Failed to parse the Currency Converter XML document.
$2 414.50


Удалённое восстановление баз MySQL с помощью PHP

Как импортировать большой SQL-скрипт (дамп базы данных MySQL для форума phpBB), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематична, особенно на модемном соединении.
Проблема
Как импортировать большой SQL-скрипт (дамп базы данных MySQL для форума phpBB), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематична, особенно на модемном соединении.

Решение

Можно попробовать через MySQL клиент типа SQLyog, MySQL-Front и т.д., но опять же не факт, что это закончится благополучно. Минимальное время — 1 (обычно 2-5) секунда на передачу и выполнение одной SQL-команды (а если их тысяч пять? загрузка займёт весь рабочий день, плюс нужно следить, не упала ли связь). Можно импортировать файл дампа с помощью phpMyAdmin или встроенных средств сPanel (что по сути один фиг), но закачивать большие объёмы данных методом POST из формы не очень надёжно и нецелесообразно — метод POST подходит для более рутинных задач, типа «Введите имя» и т.д.


Перепробовав все перечисленные способы, я выяснил, что основная проблема — непрерывная передача 9 Мб файла. Передать файл, говорите? Так это же делается через старый добрый FTP! Можно залить дамп на FTP (не волнуясь о целостности, ведь можно и докачать) и попросить админов восстановить базу, но не факт, что вам помогут, тем более на бесплатном хостинге. Хотя... где вы видели бесплатный хостинг с MySQL? Стыд и срам тому программисту, который каждый раз трясёт суппорт своими недоделками.


Пройдя через всё это, решил написать простенькую утилиту на PHP, которая будет читать SQL-файл построчно, точнее покомандно: выбирает команду (ограниченную точкой-с-запятой, исполняет её, и так далее по циклу). То есть все операции происходят внутри сервера, без участия клиента. Скорость бешеная, 9 Мб SQL-скрипт за 5 секунд!!! Ессесно, файлик должен лежать там же, где скрипт.

Минусы

Занимает большое количество ресурсов сервера, весь файл читается в память. Можно усовершенствовать, читая из файлового только отдельные SQL-команды. Будем считать это отправной точкой для сложной утилиты восстановления БД на сервере MySQL.

<?php

mysql_connect(«localhost», «login», «password»);
mysql_select_db («database»);

if (!file_exists($fname)) die («Файл $fname не существует!»);
$fp = fopen ($fname, «r»);
$buffer = fread($fp, filesize($fname));
fclose ($fp);

$prev = 0;

while ($next = strpos($buffer,«;»,$prev+1))
{
$i++;
$a = substr($buffer,$prev+1,$next-$prev);
mysql_query($a);
$prev = $next;
}

echo «Выполнено $i команд»;

?>

Что-то вроде этого.

$fname — имя файла SQL-дампа
$prev — позиция предыдущей «;»
$next — позиция следующей «;» начиная с позиции $prev

Вызываем скрипт примерно так: sqlbackup.php?fname=backup.sql, будет выполнен файл backup.sql. В конце выводится число выполненных команд. Я замеряю время выполнения для интереса, здесь для упрощения убрал. Каждый может усложнить, как считает нужным, это всего лишь простое решение повседневной задачи за пять минут.

 

Интересное

Синхронный перевод
В современных условиях при широком общении людей, для которых родные языки не совпадают, все большую популярность приобретает синхронный перевод. Он, конечно, использовался и раньше, но...
Подробнее...
Основы файловой системы...
Сегодня мы заглянем в дебри файловой системы WindowsXP. Что такое файловая система — это организация хранения Ваших файлов на жестком (или любом другом диске). На разных видах дисков в разных...
Подробнее...
Очистка списка последних...
При частом применении команды «Подключить сетевой диск» (Map Network Drive) в Windows XP, в списке последних операций (Most Recently Used, MRU) появляется множество различных сетевых путей. В этом...
Подробнее...
Защита зрения от компьютера
Технический прогресс принес не только пользу человечеству, но еще и ощутимый вред здоровью людей, которые пользуются дарами цивилизации. О чем это я? Ну, конечно же, речь здесь идет о компьютерах...
Подробнее...
Настройка VPN-сервера с...
Для начала: данная статья не претендует на роль полноценного руководства или панацеи на все случаи жизни, посему все вопросы и пожелания по исправлению и дополнению статьи шлем на.
Подробнее...
Изменение регистра
В Delphi есть три функции для изменения регистра: upcase, lowercase, uppercase. Но они работают только для латинского алфавита. Чтобы сделать аналогичные функции для русского алфавита я...
Подробнее...
26 способов получения...
Сентябрь 1999 года. Бред Табке пишет свои «26 шагов к достижению высокого трафика для сайта» в Мировом Форуме веб-мастеров. Статья имела очень много полезной информации для оптимизаторов сайтов....
Подробнее...
Основы позиционирования блоков
Блоки — прямоугольные области, используемые в CSS для формирования и отображения документов. Это упрощенно, очень сильно упрощенно, но для начала вполне может и хватить.С появлением нового...
Подробнее...
Обзор ASP
Этот текст предназначен для тех, кто никогда не имел дела с ASP, и вообще смутно себе представляет возможности программирования на стороне сервера. Я ставил себе задачу, создать у читателя общее...
Подробнее...
Форум без базы данных за...
Loser рассказывает как можно написать свой форум не используя никаких баз данныхЭтой статьей я хочу показать, что можно обойтись без баз данных, написав неплохой форум. Это статья является как бы...
Подробнее...