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

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

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


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


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

Обновление. Видимо надо пояснить прямо тут. Это не производственная задача. Это скорее интерес — а можно ли сделать что-то подобное? Если получится — хорошо, удастся внедрить — ещё лучше. Поэтому альтернативы вроде «напиши скрипт, который будет делать это по крону», не интересны, т. к. слишком скучны.
  • Вопрос задан
  • 3036 просмотров
Пригласить эксперта
Ответы на вопрос 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 готовить и отдавать дамп.
Только могут быть проблемы с определением размера файла т.к. актуальный размер дампа мы можем узнать только по его готовности.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы