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


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


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


Удалённое восстановление баз 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. В конце выводится число выполненных команд. Я замеряю время выполнения для интереса, здесь для упрощения убрал. Каждый может усложнить, как считает нужным, это всего лишь простое решение повседневной задачи за пять минут.

 

Интересное

Delphi и Flash. Совмещение...
Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается!!! И сейчас я вам расскажу об этом....
Подробнее...
Шрифты и вы - кто кого?
Гармоничный выбор преобразит вашу работу: ведь каждый шрифт — это настроение, эпоха, сила. И эти определения невольно передаются тексту, заставляя нас изначально предвзято относиться к...
Подробнее...
IMAP4 и POP3 - сравнение
Цель данной статьи — кратко рассмотреть Internet протоколы: POP (Post Office Protocol), DMSP (Distributed Mail System Protocol) и IMAP (Internet Message Access Protocol). Из трёх...
Подробнее...
Создание Web-броузера на...
Читая и перечитывая вопросы и ответы я все время натыкался на вопросы о компоненте T WebBrowser . Сначала я думал, что все просто, но когда самому понадобилось написать приложение с использованием...
Подробнее...
Как сохранить зрение:...
Искусственный свет, светящиеся экраны телевизора и компьютера, электронные игры грубо и бесцеремонно воздействуют на органы зрения, которые постоянно перенапрягаются. Как защитить глаза и помочь...
Подробнее...
.htaccess - великий и...
Как известно, самым популярным на сей день веб-сервером является Apache в различных версиях (а вовсе не IIS, как утверждает Microsoft). Его ставят на свои сервера большинство хостителей, услуга же...
Подробнее...
Запуск mergemaster для...
В статье рассматривается работа с программой mermemaster при обновлении ОС FreeBSDDisclaimer Я ни в коем разе не претендую, что установка сделана правильно, корректно, «так как надо» и...
Подробнее...
Введение в протокол UDP
UDP (User Datagram Protocol, Протокол дейтаграмм пользователя) предназначен для обмена дейтаграммами между процессами компьютеров, входящих в единую сеть с коммутацией пакетов. В качестве...
Подробнее...
Что нового в SQL Server...
Наконец-то процесс создания SQL Server 2005 завершен. Если вы на протяжении долгого времени следили за подготовкой новой версии SQL, устанавливали и использовали бета-версии, с пристрастием...
Подробнее...
Ещё о защите e-mail...
Оригинальная защита e-mail адресов от сканирования спам-роботами. Мы не будем кодировать адреса, мы будем их… рисовать!О защите e-mail адресов от сканирования спам-роботами в Интернете писалось...
Подробнее...