Веб-студия, создание сайтов, создание Интернет-магазинов
-
Рубрики
-
Календарь
Май 2012 Пн Вт Ср Чт Пт Сб Вс « Авг 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Архивы
- Август 2011 (6)
- Март 2011 (3)
- Февраль 2011 (3)
- Ноябрь 2010 (7)
- Октябрь 2010 (2)
- Сентябрь 2010 (7)
- Август 2010 (8)
- Июль 2010 (11)
- Июнь 2010 (9)
- Май 2010 (16)
- Апрель 2010 (48)
- Март 2010 (23)
- Февраль 2010 (14)
- Январь 2010 (14)
- Декабрь 2009 (9)
- Ноябрь 2009 (6)
- Октябрь 2009 (8)
- Сентябрь 2009 (13)
- Август 2009 (22)
- Июль 2009 (30)
- Июнь 2009 (46)
- Май 2009 (28)
- Апрель 2009 (14)
- Март 2009 (8)
- Февраль 2009 (11)
Новые комментарии
- Галина к записи С Днем сисадмина!
- Примеры скриптов « Эхо блогосферы к записи Разбор XML файла с помощью PHP
- Примеры скриптов « Эхо блогосферы к записи Разбор XML файла с помощью PHP
- admin к записи Сделать спойлер
- admin к записи Сделать спойлер
- Sveta к записи Сделать спойлер
- Sveta к записи Сделать спойлер
- Димыч к записи Простой скрипт для создания превью
Удалённое восстановление баз 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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. В конце выводится число выполненных команд. Я замеряю время выполнения для интереса, здесь для упрощения убрал. Каждый может усложнить, как считает нужным, это всего лишь простое решение повседневной задачи за пять минут.
Вы должны зайти чтобы оставить комментарийt.
Нет трэкбэков.
|
General Office Technologies 2010 © All Rights Reserved. Architecture and Web Design: Alexander Morgan |


2 лет назад
Никогда не было проблем с загрузкой SQL
через phpmyadmin.
Спасибо за инфу
2 лет назад
Никогда не было проблем с загрузкой SQL
через phpmyadmin.
Спасибо за инфу