Random MySQL date

В этой статье рассмотрим несколько вариантов получения случайной даты в MySQL. Для чего это нужно? Ну к примеру для генерации фикстур и прочих тестовых данных, чтобы были похожи на реальные.

Continue reading

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

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

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

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

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

Continue reading

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

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

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

Continue reading

i18n данные в mysql

Полезный пост от Жени Бабина: http://discover-symfony.blogspot.com/2010/05/symfony-i18n-over-mysql.html.

Рассказывается о том как XLIFF переводы (текст в шаблонах) хранить в MySQL. По образу и подобию можно воспользоваться gettext или SQLite. В принципе можно и свой адаптер написать.

Спасибо, Женя )

Сниппет: инициализация character_set и collation для Doctrine в Symfony

Для того чтобы Doctrine создавал таблицы в базе данных с правильным набором символов и collation (например utf8 и utf8_general_ci, а не latin1, используемый mysql по умолчанию (например)) необходимо выполнить простую инициализацию:

// config/ProjectConfiguration.class.php:
public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setCharset( 'utf8' );
  $manager->setCollate( 'utf8_unicode_ci' );
}

Спасибо Андрэю Дзягелю из русскоговорящего symfony-коммьюнити )

Volume testing: быстрое наполнение тестовых таблиц в MySQL

Представим, что вы создаете новое приложение и вам нужно протестировать его на большом объеме данных (volume testing). В этом случае вы можете взять уже готовые данные, или же подготовить их самостоятельно. Если у вас есть набор данных для тестов достаточного объема – это просто замечательно, но чаще всего данных нужного объема у вас не будет и вам будет нужен способ для быстрого их создания. Ниже будут перечислены три способа создания больших наборов данных простых типов (чисел, слов, дат).

Continue reading

MySQL генерация непрерывного диапазона дат

Столкнулся с ситуацией, когда посредством MySQL необходимо выбрать непрерывный диапазон дат. Казалось бы, что тут сложного? А вот что – в целевой таблице может не быть данных за какую-то из дат в диапазоне. Соответственно непрерывный диапазон не получается.

Решений наверное может быть много разных. Предлагаю ознакомиться с одним из них.
Continue reading