Скрипт для бэкапа mysql баз

Написал для себя простенький скрипт (linux bash) для бэкапа всех баз на одном сервере. Его отличительные особенности:

  • Наличие списка исключений (т.е. бэкапим все кроме…)
  • Получение списка всех БД из MySQL (не надо добавлять вновь созданные базы к бекапу)
  • Создание директории под бэкап вида “…/YYYY/mm/dd/HH-MM/”
  • Бэкап каждой базы в отдельный файл вида “YYYY-mm-dd.HH-MM.databasename.backup.sql” (mysqldump бэкапит все в один файл)
  • Архивирование бэкапа в тарбол
  • Зачистка .sql

Собственно к написанию скрипта меня сподвигло именно то что mysqldump бэкапит все что ему сказано в один файл (если требуется восстановить одну базу, то попробуй ее выцарапай из общего дампа…), а создавать отдельную строку для бэкапа всякой новой БД геморно (об этом как минимум надо вспомнить!).

В общем если интересно – прошу под кат:

Continue reading

Symfony 2: конфигурирование пакетов

Для обеспечения большей гибкости, пакет (bundle) может содержать ряд конфигурационных настроек, используя встроенный механизм Symfony2.

Простая конфигурация

Для простой конфигурации можно воспользоваться разделом parameters, по-умолчанию присутствующим в конфигурации Symfony2. Параметры – это простые пары ключ-значение; значением может быть любое валидное значение с точки зрения PHP. Каждое наименование параметра должно начинаться с наименования пакета в нижнем регистре (hello для HelloBundle, или sensio.social.blog для SensioSocialBlogBundle).

Continue reading

( PHP CLI & eAccelerator ) != love

На днях встал вопрос об оптимизации запуска cron-скриптов. Подавляющая часть – это таски symfony (т.е. выполняется что-то типа ./symfony namespace:taskname params) и даже в условиях использования nice они создают приличный оверхед на сервер.

В ходе разбора полетов решил уяснить, работает ли eAccelerator c php-cli. Собственно с подсказки @ibulatenko забрел на страницу http://eaccelerator.net/wiki/Faq, на которой черным по вебу написано в самом низу страницы:

Is eAccelerator working with php-cgi or php-cli?
This is not yet supported and it won’t be supported in the near future. However FastCGI is supported.

P.S. Судя по всему ни один акселератор не работает при использовании CLI интерфейса (по крайней мере точно известно про XCache, при этом там также написано что поскольку у CLI совершенно другой принцип работы, то и ожидать не стоит).

Symfony 2: пакеты, практические рекомендации

Пакет – прежде всего это директория, которая имеет строго определенную структуру и может содержать все что угодно (от классов, до контроллеров и web-ресурсов). Не смотря на то что пакеты очень гибки, вы должны следовать некоторым рекомендациям (best practices), если вы хотите выложить его в общий доступ. Об этих практиках мы и поговорим ниже:

Continue reading

Symfony 2 для разработчиков на symfony 1.x

Symfony 2.0 по сравнению с первой версией фреймворка шагнул далеко вперед. К счастью, MVC архитектура, лежащая в основе его ядра, позволяет использовать те же навыки, что вы использовали, разрабатывая приложения для symfony1 и для Symfony2. App.yml вы конечно тут не увидите, но маршрутизация, контроллеры и шаблоны сохранились.

В этой статье мы рассмотрим ключевые отличия между symfony1 and Symfony2. Как вы сможете увидеть, многие задачи там решаются несколько иными путями. И вы научитесь ценить эти небольшие изменения, так как они позволят вам разрабатывать стабильный, предсказуемый, тестируемый и независимый код в ваших будущих приложениях на Symfony2.

Итак, расслабьтесь, и внимайте.

Continue reading

(не) понимание

Между тем, что я думаю, тем, что я хочу сказать, тем, что я, как мне кажется, говорю, тем, что говорю, и тем, что вы хотите услышать, тем, что, как вам кажется, вы слышите, тем, что вы слышите, тем, что вы хотите понять, тем, что вы понимаете, стоит десять вариантов возникновения непонимания. Но все-таки давайте попробуем…

Якобы слова Эдмонда Уэллса. Подсмотрено тут.

К чему это я… Только задумайтесь, сколько недопонимания в нашей жизни. Общество непонимания прямо таки… Даже не удивительно что все в этой жизни идет не так как хотелось бы.

ProFTPD – symlink = mount

Потребовалось мне сделать на девелопеском сервере логин для временного человечка, который JavaScript кумекает. Это конечно не проблема, но вот что меня в тупик поставило на некоторое время.

Помимо собственно FTP на сервер, человечку нужен был виртуальный хост для его отладочных нужд. Сервер как правило использовался только проверенными людьми, поэтому особо с безопасностью никто особо не заморачивался. Ан вот приспичило. На счастье, попался мне на просторах интерентов документик ProFTPD mini howto, в котором подробно разбирается почему демон не хочет работать с прямыми симлинками из хомяка в docroot виртуальника (в моем случае). Собственно остановился я на этом решении:

Filesystem Tricks […]

To have an exact duplicate of the /var/ftp/incoming directory available in /home/bob/incoming and /home/dave/incoming, use one of these commands:

Linux (as of the 2.4.0 kernel):

  mount --bind /var/ftp/incoming /home/bob/incoming
  mount --bind /var/ftp/incoming /home/dave/incoming

Что я в общем-то и применил.

P.S. Надеюсь дыр в безопасности не добавил )

MySQL оптимизация: ORDER BY RAND()

Лирическое вступление:

Довольно часто у нас возникает потребность выборки случайных данных из mysql базы данных. Как правило времени нет и используется самая простая конструкция вида SELECT [что-то] FROM [где-то] WHERE [то и сё] ORDER BY RAND(). Эта конструкция работает на ура. Но вот прототип выезжает на продуктовые сервера и такой милый сердцу запрос вдруг начинает выпадать в топы медленных логов. Ниже будут рассмотрены несколько возможностей для оптимизации этого запроса по нарастанию их эффективности:

Continue reading

sandbox symfony не отображаются картинки

Вот по такому запросу приходят ко мне люди. Топ 2 в топе поисковых запросов )

А не отображаются они потому что в sandbox по умолчанию в web директории нет директории sf. Её можно скопировать отсюда: lib/vendor/symfony/data/web/sf. Например так:

cp -R sandbox_root/lib/vendor/symfony/data/web/sf sandbox_root/web

Coding with fun!… Как-то так на этот раз.

p.s. Да, я ленюсь писать что-то более существенное ))

UPD: Пользователь Serg предложил также вариант с алиасом:

Alias /sf "[абсолютный_путь_к]/symfony/data/web/sf"
AllowOverride All
Allow from All

Эти строки нужно добавить в конфигурацию виртуального хоста вашего проекта.