[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

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

Проблема

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

Автор: Алексей Курепин (fox++)
Источник: www.foxweb.net.ru



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 5459 сегодня - 1

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 5370 сегодня - 0

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 5128 сегодня - 0

No spam.php
10-11-2009   

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

Кол. просмотров: общее - 5180 сегодня - 0

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 5174 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects