Dump Mysql базы посредством PHP

snob2006

Новичок
Dump Mysql базы посредством PHP

Подскажите, пожалуйста, как сделать дамп базы средствами PHP, есть ли какое API. В phpmyadmin'е есть функция сохранения дампа на диск, каким образом это реализуется? Вызывается mysqldump? Необходима утилита на PHP сохранения веб-директории и дампа базы в один архив с последующей закачкой с веб-сервера на локальную машину.
 

matross

Новичок
Re: Dump Mysql базы посредством PHP

Автор оригинала: snob2006
Подскажите, пожалуйста, как сделать дамп базы средствами PHP, есть ли какое API. В phpmyadmin'е есть функция сохранения дампа на диск, каким образом это реализуется? Вызывается mysqldump? Необходима утилита на PHP сохранения веб-директории и дампа базы в один архив с последующей закачкой с веб-сервера на локальную машину.
system("mysqldump --opt db_name > backup-file.sql");
 

snob2006

Новичок
Re: Re: Dump Mysql базы посредством PHP

Спасибо. Я так и делал, но думал, что возможно есть некие встроенные в PHP функции для ускорения выполнения дампа. Поэтому есть еще вопрос: как долго выполняется дамп для баз различных размеров (100 мб, 500 мб) на серверах типа Pentium III и Xeon?
 

snob2006

Новичок
Re: Re: Re: Re: Dump Mysql базы посредством PHP

Оригинально. Хм...
Ладно, еще глупый вопрос. Не работает system("mysqldump --opt > SQLFILE").
Полагаю нужна авторизация для выполнения системных команд. Я прав? Средставами веб-сервера, а не php-скрипта, используемого в качестве движка. Как сделать авторизацию?

Другой глупый вопрос. Есть вещи в mysql типа "дай структуру таблицы" и "дай всё что есть в таблице". Вопрос: Есть ли скрипт php, который таким образом поработав с базой данных создает файл дампа? Таким образом работает phpmyadmin, но дюже громоздок. Мне надо проще. Есть ли простой и понятный простому человеку (не гуру-программисту) скрипт создания дампа базы по ее анализу?
 

Фанат

oncle terrible
Команда форума
Полагаю нужна авторизация для выполнения системных команд. Я прав?
нет.
нужна авторизация для соединения с mysql, указываемая в параметрах mysqldump

Впрочем, это всего лишь мои предположения.
причина мжет быть в другом, а определить её по детскому лепету
не представляется возможным

но дюже громоздок. Мне надо проще
умерь свои аппетиты.
извини, но под твои личные запросы и субьективные оценки понятности и громоздкости никто скриптов не писал и, насколько я знаю - не собирается.
если тебе нужен интерфейс для тыканья пальчиком, то phpmyadmin - твой выбор.
 

matross

Новичок
Re: Re: Re: Re: Re: Dump Mysql базы посредством PHP

Автор оригинала: snob2006
Оригинально. Хм...
Ладно, еще глупый вопрос. Не работает system("mysqldump --opt > SQLFILE").
Полагаю нужна авторизация для выполнения системных команд. Я прав? Средставами веб-сервера, а не php-скрипта, используемого в качестве движка. Как сделать авторизацию?

Другой глупый вопрос. Есть вещи в mysql типа "дай структуру таблицы" и "дай всё что есть в таблице". Вопрос: Есть ли скрипт php, который таким образом поработав с базой данных создает файл дампа? Таким образом работает phpmyadmin, но дюже громоздок. Мне надо проще. Есть ли простой и понятный простому человеку (не гуру-программисту) скрипт создания дампа базы по ее анализу?
Авторизация
system("mysql -u ".$db_user." --p password=".$db_pass." и так далее...

Ну а на счет дампа - смотри нелп на mysqdump -u username --p password и все такое
 

crocodile2u

http://vbolshov.org.ru
Что в этом коде делает пхп?

Зайди по SSH, сделай дамп из оболочки, как получится - скопируй команду в свой скрипт.

И кроме того - у хостера, вполне возможно, есть на своем сайте информация о том, как сдампить мускул-базу, используя оболочку.
 

matross

Новичок
Автор оригинала: crocodile2u
Что в этом коде делает пхп?

Зайди по SSH, сделай дамп из оболочки, как получится - скопируй команду в свой скрипт.

И кроме того - у хостера, вполне возможно, есть на своем сайте информация о том, как сдампить мускул-базу, используя оболочку.
Вот так, например, понятно???

system("mysql -u ".$db_user." --password=".$db_pass." ".$db_name." < '".$filename."'");
 

crocodile2u

http://vbolshov.org.ru
Во-первых, определись, что ТЕБЕ нужно.

Тема называется "Dump Mysql базы..."

То, что ты делаешь - не есть Dump.

смотри mysql.com на предмет использования клиентских приложений mysql.

hint: mysqldump. И не " ... < file.sql", а " ... > file.sql"

-- edited --

А, сорри, тему-то не ты начал...

Блин, совсем запутали...
 

matross

Новичок
Автор оригинала: matross
Вот так, например, понятно???

system("mysql -u ".$db_user." --password=".$db_pass." ".$db_name." < '".$filename."'");
Я ответил на твой вопрос что тут делает пхп, а кусок кода просто закопировал, для примера... Путаться здесь не в чем...
 

crocodile2u

http://vbolshov.org.ru
"Запутали": в смысле, тема называется "дамп", а разговор про обратную операцию в последних постах.
 

snob2006

Новичок
To Фанат: я, конечно, субъективен и ребенок. Мои аппетиты ограничиваются чашкой кофе по утрам и тарелкой пельменей на ужин. Хотя хочу просыпаться по утрам и получать вместе с кофе уведомление из банка о значительном поступлении на счет. А пока этого нет, приходится писать простые утилиты с одной кнопкой, нажав на которую можно получать результат.

Я большой ноль в программировании на php, поэтому читаю перед сном мануалы по php и mysql. Более того занимаюсь хостингом два года. И бэкап с помощь небольшого скрипта на perl делаю на "Ура!". Захожу по SSH и запускаю скрипт, получаю сразу .tar.gz архив, в котором лежит дамп базы и вся веб-директория сайта. Т.е.
system("mysqldump --user=$db_user --password=$db_password $db_name > $sqlfile"); работает, но если зашел по SSH и с правами владельца веб-директории, что в данном случае равноценно правам рута. Хочу создать веб-скрипт для бэкапа через http-протокол. Зачастую имею доступ только через прокси, который не пропускает ничего кроме http-траффика.
Полагаю, что запрещен запуск system для посетителя странички, поэтому его нужна авторизовать. Каким образом?

Второй вопрос. Я покопался в phpmyadmin'е, он делает анализ таблиц базы и забирает данные из нее с помощью обычного SELECT. Затем оформляет обратный SQL запрос, которым можно восстановить базу (с CREATE TABLE и INSERT). Но phpmyadmin, извините, громоздок, это мое сугубо субъективное мнение, но назвать скрипт в 6 мегабайт с очень навороченной объектной реализацией изящным увольте. Есть ли более простой скрипт, делающий дамп по анализу базы? Без всяких полей заполнения данными базы, без оптимизаций и прочего, делающий одно дело - дамп.

Еще одно лирическое отступление. Вчера вечером ходил в кино с девушкой, поужинали в небольшом ресторане с живой музыкой, в общем, хороший был вечер. Начальство выдало премию за досрочно сданный проект, ее всю и потратил. Почему досрочно? Мой друг в Европе пишет небольшую CMS, я ее использую в практических задачах. Если мне чего-то надо от CMS, он выпускает плагин или исправление. Так и развивается. Я помогаю писать некоторые плагины, так вот для CMS достаточно важный момент - это создания бэкапа, помимо системного (имею в виду хостингово системы либо средств ОС). Пользователь CMS самостоятельно делает бэкап перед размещением новой информации, перед изменением структуры сайта, и если вдруг изменения его не устраивают, то он делает откат. С CMS мы обязательно делаем брошюру формата А5 о возможностях системы и их реальных применениях. Бэкап - это серьезно.

Повторю еще раз вопросы: 1. Каким образом осуществляется авторизация? 2. Есть ли более простой скрипт, делающий дамп по анализу базы?
 

Фанат

oncle terrible
Команда форума
Хочу создать веб-скрипт для бэкапа
Есть ли более простой скрипт
ты уж определись, милый.
Если первое - то занимайся и задавай конкретные вопросы.
если второе, то просто ясно скажи это, и твой вопрос переедет в раздел для крутых хостеров, не умеющих пользоваться гуглем и ждущих, когда кто-то сделает это для них.

Задача ясна? Выполняй.
По результатам будешь или иметь ответы на свои вопросы или ждать манны небесной в оффтопике.

Рад за твою девушку, но избавь нас пожалуйста, от гастрономических подробностей.
постарайся воздержаться от лирических отступлений вредь, если желаешь общаться на этом форуме.

-~{}~ 16.03.05 14:01:

Не могу удержаться, чтобы не прокомментировать парочку особенно интересных мест в этом пафосном заявлении.
бэкап с помощь небольшого скрипта на perl
ты хотел сказать - одна строчка на шелле, уважаемый хостер-второгодник?
Полагаю, что запрещен запуск system для посетителя странички
про посетителя странички - это пять. Сколько-сколько ты, говоришь, хостингом-то занимаешься? А в чем конкретно твои обязанности заключаются? Бегать за кофе и сигаретами? Видимо, так и пробЕгал, когда сотрудники хостера говорили об отличиях ПОСЕТИТЕЛЯ странички от ВЕБ-СЕРВЕРА, его обслуживающего.
Есть ли ... скрипт, делающий дамп ... Без ... заполнения данными базы
извини, а это как? Дамп без заполнения?

-~{}~ 16.03.05 14:08:

Есть вещи в mysql и "дай всё что есть в таблице". Вопрос: Есть ли скрипт php, который таким образом поработав с базой данных создает файл дампа?
такой скрипт есть.
называется mysql_query и mysql_fetch_array
берёшь "вещь типа "дай структуру таблицы", засовываешь в первую функцию и из результата второй вытаскиваешь структуру.
с данными - аналогично.
 

snob2006

Новичок
To Фанат: спасибо за комментарии и советы, они существенно помогли мне написать скрипт создания дампа базы данных по анализу ее структуры. Только закончил. Пойду спать.

P.S. Про скрипт на perl: скрипт делает дамп (используя mysqldump), архивирует его и веб-директорию сервера, и создает два shell скрипта (добавляет их в архив бэкапа): один расставляет chmod для различных типов файлов и директорий, а второй делает восстановление веб-директорий и дампа из архива. snob2006_AT_yandex_DOT_ru Кому надо скрипт- пишите на эл.почту, вышлю.
 

Фанат

oncle terrible
Команда форума
Ну, извини тогда, за резкость.
А то я подумал, что ты и вправду сноб.

а всё-таки, я так и не понял - что означает "дамп базы данных по анализу ее структуры"
сначала я думал, что это нечто интерактивное.
а сейчас не понимаю вообще.
вроде бы - дамп он и есть дамп, независимо от структуры. Как я это понимаю
 

ONK

Пассивист PHPСluba
Я сталкивался с анализом структуры таблиц только при обновлении и автоматическом изменении структуры таблиц для смены версии программного обеспечения. Но зачем анализ структуры таблиц при дампе мне не понятно.
Может имеется в виду просто сохранение структуры таблиц?
 

snob2006

Новичок
Phpmyadmin анализирует структуру базы делая запросы типа SHOW FIELDS и прочее, создает схему таблицы, где указаны типы и аттрибуты полей, а затем создает запрос "CREATE ...", который записывает в файл. Выборкой "SELECT" забираются данные из базы и оформляются в оператор "INSERT", который тоже записывается в файл дампа. В phpmyadmin'е все сделано с ОО подходом, поэтому трудно проследить откуда и почему какие функции вызываются.

В MySQL есть операторы для создания бэкапа "BACKUP TABLE" и "SELECT INTO file". Если первый просто копирует минимальный набор файлов базы необходимых для сохранения таблицы, то второй создает SQL запрос. Я написал скрипт, используя второй оператор, котрый, перебрав все таблицы базы и для каждой написав "SELECT INTO file", создает дамп базы. Тоже пока не очень изящно.

Еще одно отступление: я учился на факультете физики, и представление о изящности складывается из понятности тензорных уравнений 2-го порядка. Если решение такого уравнения понятно всем в аудитории, а я не владелец самого высокого ума, то оно считалось хорошим. Если же каждый мог рассказать в двух словах решение, уместившееся в три строки, понятно, доступно, без "Ну, это типа, тута, штука вон туда", то такое решение близко к идеалу.

To Фанат: я действительно сноб. Извинения приняты.

To ONK: да, пожалуй, я вновь неудачно выразился, сохранение структуры таблиц базы будет корректнее. Фанат все время меня просит выражаться яснее, но не получается. Буду стараться. В phpmyadmin'е это целое препарирование таблиц. Спасибо за поправку.
 
Сверху