Mekras
@Mekras
Веб-разработчик

Файл, являющийся отражением дампа БД MySQL?

Нашим программистам приходится часто сохранять в SVN снимки состояния различных сайтов, расположенных на нашем сервере (FreeBSD). Эти снимки должны включать в себя файлы сайта и дамп его БД (MySQL). Если с файлами всё более менее просто, то вот делать дампы — занятие слегка утомительное (из-за чего программисты часто про них забывают). И вот родилась такая глупая мысль: было бы здорово, если бы удалось разместить в домашней папке сайта (конечно же недоступной через веб) особый файл, при чтении которого возвращался бы текстовый дамп БД. Тогда бы программист, скачивая с сервера файлы сайта, получал бы и дамп.


Поиск в поисковиках готовых решений (например для создания файлов, при чтении которых вызывался бы скрипт) ничего не дал (может не так искал?). Следующая мысль — написать свой драйвер устройства, а в папки сайтов класть символическую ссылку на него. Но тут возникает трудность: БД на сервере много, как драйверу узнать, какую из них дампить? Записать в устройство имя БД перед чтением — не вариант, по понятным причинам. Делать своё устройство для каждой БД тоже не самое удобное решение.


Может у кого-то есть светлые мысли, как решить задачку?

Обновление. Видимо надо пояснить прямо тут. Это не производственная задача. Это скорее интерес — а можно ли сделать что-то подобное? Если получится — хорошо, удастся внедрить — ещё лучше. Поэтому альтернативы вроде «напиши скрипт, который будет делать это по крону», не интересны, т. к. слишком скучны.
  • Вопрос задан
  • 3038 просмотров
Пригласить эксперта
Ответы на вопрос 6
seriyPS
@seriyPS
Чё-то вы идиотское там делаете…

Но вообще вам нужно fifo использовать
что-то наподобие
DUMP_FILE=/path/to/fifo
mkfifo $DUMP_FILE
while 1; do
    mysql_dump > $DUMP_FILE
done

Т.е. мусклдамп начнет отдавать данные только когда кто-то начнет читать из /path/to/fifo. Т.к. оно зациклено то при каждом чтении будет выдаваться новый дамп. Но я не уверен что mysql_dump не залочит БД сразу при запуске.
Но лучше бы вам просто скрипт для дампа написать и не заниматься фигней.
Ответ написан
@egorinsk
Внимание, правильный ответ.

Вместо скачивания файлов вручную и, тем более, написания своих файловых систем, необходимо написать скрипт (на любом нравящемся вам языке, я бы выбрал bash), который будет соединяться с сервером по ssh, делать дамп БД, и коммитить все нужные файлы в SVN. Сам будет делать всю работу, а не вручную. Тогда проблема «забыл закоммитить файл» исчезает автоматически.
Ответ написан
gaelpa
@gaelpa
Может для начала завести сами скрипты дампа в файл? Уже не так лень будет.
Ответ написан
AntonioK
@AntonioK
Изобретаете велосипед.

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

Сами файлы дампов нужно жать и скидывать на удаленный сервер (или в dropbox какой-нибудь) для сохранности.
Ответ написан
AxisPod
@AxisPod
Ну тут вряд ли вы чего найдете, а так ищите по ключевым словам file system.
Ответ написан
@SleepingLion
Можно написать скрипт, который прикинется FS с помощью FUSE.
В этой виртуальной FS базы представлять в виде файлов. На каждую операцию read готовить и отдавать дамп.
Только могут быть проблемы с определением размера файла т.к. актуальный размер дампа мы можем узнать только по его готовности.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы