Доброго времени суток хабрачитатели. Совсем не давно на работе произошел инцидент который подпортил нервы и привел к длительным рассуждениям. Суть: при обновлении записи в БД mysql забыл прописать условие where и в результате изменились все записи в таблице.
Читать полностью »
Рубрика «mysql» - 41
Экстренное восстановление данных в таблице mysql с минимальной потерей времени
2013-04-18 в 5:31, admin, рубрики: dump, mysql, бд, Веб-разработка, восстановление, метки: dump, mysql, бд, восстановление Разбираясь как работает та или иная CMS приходится использовать различные инструменты, облегчающие работу.
Наиболее интересная тема — это работа с баз(ой|ами) данных. Естественно для изучения запросов и результатов запросов нужно использовать что-то универсальное. Что-то, что будет работать стабильно как с известным движком, так и с самописной системой.
Предположим у вас оказалась система управления контентом и вам необходимо посмотреть как реализовано добавление новых пользователей или смена паролей.
Большинство инструментов позволяющих мониторить работу с БД являются платными [раз, два]. Я хотел что-то более легкое и удобное, поэтому выбрал mysql-proxy. Хотя возможности утилиты гораздо шире чем мне требуется, я опишу лишь основное. Работает как под Windows, так и под Unix системами.
Читать полностью »
Время ответа сервера — одна секунда
2013-04-14 в 15:45, admin, рубрики: mysql, php, Веб-разработка, высокая производительность, скорость работы, метки: mysql, PHP, скорость работыВ данном небольшом посте я бы хотел поделиться своими мыслями насчёт скорости работы скриптов/программ, которые мы с вами пишем каждый день и обратить внимание на то, сколько «невидимой» работы совершается при выполнении привычных действий.
Выполнение SQL-запросов
Все знают, что работа с SQL обычно является одной из самых медленных компонентов любого сайта. Есть ли какие-то объективные причины для этого? Действительно ли базы данных такие медленные и срочно нужно переходить на NoSQL :)? Давайте посмотрим.
Создадим тестовую табличку в MySQL и наполним её 1 млн записей:
<?php
mysql_connect(...) or die("Cannot connectn");
mysql_select_db(...) or die("Cannot select DBn");
mysql_query('CREATE TABLE IF NOT EXISTS `one_million` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`one` int(11) NOT NULL,
`two` int(11) NOT NULL,
`three` int(11) NOT NULL,
`four` int(11) NOT NULL,
`five` int(11) NOT NULL,
`six` int(11) NOT NULL,
`seven` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB') or die("Cannot create tablen");
for ($i = 0; $i < 1000000; $i++) {
if ($i % 1000 === 999) echo "Done $in";
mysql_query('INSERT INTO one_million VALUES(NULL, ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ')');
}
// Да, код не использует batch insert, а также использует устаревшее, но до сих пор работающее расширение mysql
Давайте теперь выполним какой-нибудь простенький запрос, который прочитает нам 1 млн записей:
SELECT COUNT(*) FROM one_million WHERE three = 333
На моем компьютере запрос выполнился за 200 мс! Таким образом, можно заключить, что InnoDB в состоянии просмотреть около 5 млн записей за 1 секунду! Давайте подумаем, где же на веб-сайтах может потребоваться просматривать столько записей на одну страницу :)? На моей прошлой работе я принудительно выставил ограничение в 20 000 просмотренных строк на все SQL-запросы, и после вычищения всех «тормозных» мест время открытия страницы упало в 5 раз!
Читать полностью »
Решение проблемы с кодировкой данных из MySQL в Symfony
2013-04-12 в 9:55, admin, рубрики: CP1251, doctrine, Doctrine ORM, mysql, symfony, twig, utf8, метки: CP1251, doctrine, mysql, symfony, twig, utf8Сразу хочу сказать, что в Symfony и Doctrine я новичок и с подобного рода проблемой именно при использовании Symfony столкнулся впервые, но думаю, что и мой опыт может быть кому-то полезен при решении аналогичных или схожих задач.
Предыстория:
Довелось мне не так давно выкладывать некий проект на Symfony2 на хост площадку, но, как это довольно часто бывает, на живом сервере приложение работать отказалось, и включив debug, я увидел уведомление примерно следующего плана:
Twig_Error_Runtime: An exception has been thrown during the rendering of a template
(«Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in
/.../app/cache/prod/classes.php line ...») in "..." at line ...
Быстрый старт: Визуальное проектирование базы данных в MySQL Workbench
2013-04-09 в 6:36, admin, рубрики: mysql, sql, базы данных, Песочница, проектирование базы данных, Проектирование и рефакторинг, метки: sql, базы данных, проектирование базы данных 
Цель данного поста — помочь начинающему разработчику быстро освоится и спроектировать простенькую базу с помощью инструмента для визуального проектирования баз данных MySQL Workbench от компании Oralce и получить её ER-модель и SQL-дамп.Читать полностью »
Обеспечение бесперебойности (HA) с платформой OpenStack: варианты топологий
2013-04-08 в 8:19, admin, рубрики: api, glance, iscsi, keystone, mysql, open source, openstack, RabbitMQ, Блог компании Mirantis/OpenStack, мирантис, метки: api, glance, iscsi, keystone, mysql, openstack, RabbitMQ, мирантисАвтор: Piotr Siwczak
Когда я разрабатывал свою первую инфраструктуру OpenStack, я с трудом находил информацию о том, как следует распределять многочисленные ее компоненты по оборудованию. Я изучил множество документов, в том числе справочник по архитектуре Rackspace (который ранее был размещен по ссылке referencearchitecture.org, но сейчас, похоже, эта ссылка устарела). Я также просмотрел проектные схемы в документации OpenStack. Должен признать, что тогда у меня были только базовые знания о том, как взаимодействуют компоненты, поэтому я остановился на достаточно простой схеме: один “управляющий узел”, который включал все компоненты, в том числе API-сервисы, nova-scheduler, Glance, Keystone, базу данных и RabbitMQ. Под управление узла я поместил ферму “рабочих лошадок” — вычислительных узлов. Я также организовал три сети: частную (для трафика с фиксированным IP-адресом и управления серверами), общедоступную (для трафика с динамическим IP-адресом) и для хранения (для трафика по протоколу iSCSI сервиса nova-volume).
Когда я начал работать в Mirantis, я значительно изменил свой подход. Я понял, что все мои идеи по созданию фермы выделенных вычислительных узлов с одним или двумя управляющими узлами, были неверными. С одной стороны, мой подход был хорош в плане разделения компонентов, но на практике мы можем с легкостью смешивать и компоновать рабочие компоненты без перегрузки OpenStack (например, сервис nova-compute с сервисом nova-scheduler на одном узле). Оказывается в OpenStack “управляющий узел” и “вычислительный узел” могут иметь разные значения в зависимости от того, как гибко распределены компоненты OpenStack.
В общем, можно предположить, что в каждой установке OpenStack должны быть как минимум три типа узлов (и, возможно, четвертый), которые описал мой коллега Олег Гельбух:Читать полностью »
Миграция данных с MySQL на PostgreSQL
2013-04-04 в 12:28, admin, рубрики: c++, mysql, postgresql, метки: c++, mysql, postgresqlПо мере работы с базами данных, ознакомления с их плюсами и минусами, возникает момент, когда принимается решение миграции с одной СУБД в другую. В данном случае возникла задача переноса сервисов с MySQL на PostgreSQL. Вот небольшой перечень вкусностей, которые ждут от перехода на PostgreSQL, версии 9.2 (с более подробным списком возможностей можно ознакомится тут):
- наследование таблиц (есть ограничения, которые обещают в будущем исправить)
- диапазоны: int4range, numrange, daterange
- поддержка из коробки несколько языков для хранимых функций (PL/pgSQL, PL/Tcl, PL/Perl, PL/Python и голый C)
- оператор WITH, позволяющий делать рекурсивные запросы
- (планируется) материализованные представления (частично они доступны и сейчас — как IUD правила к представлению)
- (планируется) триггера на DDL операции
Как правило, существующие решения опираются на работу с уже готовым SQL дампом, который конвертируется в соответствии с синтаксисом целевой БД. Но в некоторых случаях (активно использующееся веб-приложение с большим объемом информации) такой вариант несет определенные временные затраты на создание SQL дампа из СУБД, его конвертации и загрузку получившегося дампа снова в СУБД. Поэтому оптимальней будет online-вариант (прямиком из СУБД в СУБД) конвертера, что может существенно уменьшить простой сервисов.
Читать полностью »
На пути к бесперебойному (HA) открытому облаку: введение к использованию OpenStack в коммерческих установках
2013-04-01 в 8:39, admin, рубрики: api, chef, mysql, open source, openstack, puppet, RabbitMQ, Блог компании Mirantis/OpenStack, метки: api, chef, mysql, openstack, puppet, RabbitMQ, НоваАвтор: Олег Гельбух
21 августа 2012 года
Существует несколько основных требований, которые предъявляются к развертыванию платформы OpenStack для коммерческой эксплуатации, как в качестве небольшого кластера для сред разработки в стартапах, так и в виде крупномасштабной установки для поставщика ресурсов для облачных сервисов. Чаще всего встречаются и, как следствие, являются наиболее важными следующие требования:
— Бесперебойность (HA) сервиса и резервирование
— Масштабируемость кластера
— Автоматизация технологических операций
Компания Mirantis разработала подход, который позволяет удовлетворять всем этим трем требованиям. Эта статья – первая в ряде статей, которые описывают наш подход. В статье содержится обзор используемых методов и инструментов.
Бесперебойность (HA) и резервирование
В целом сервисы на базе платформы OpenStack можно разделить на несколько групп, в данном случае основываясь на подходе обеспечения бесперебойности для каждого сервиса.
API-сервисы
Первая группа включает API-серверы, а именно:Читать полностью »
Проблемы MySQL оптимизатора
2013-03-16 в 12:14, admin, рубрики: mysql, mysql performance, метки: mysql performanceЧто я успел понять про MySQL за несколько лет его разработки:
- развивать не ломая обратной совместимости его нельзя
- MySQL со сломанной обратной совместимостью никому не нужен.
Я опишу две серьёзные проблемы ДНК MySQL, с которыми косвенно сталкивается любой пользователь MySQL 5.1 и 5.5 (насчёт 5.6 не проверял, но не думаю, что этот момент поменялся).
Как вообще MySQL работает?
Универсальный рейтинг или нам важен каждый голос
2013-03-09 в 7:13, admin, рубрики: mysql, Алгоритмы, интересные задачи, рейтинги, Спортивное программирование, фильмы, метки: Алгоритмы, интересные задачи, рейтинги, фильмы
Недавно передо мною встала задача сортировки фильмов по рейтингу. Каждый фильм имеет 2 значения — это средняя оценка и количество прогосовавших (точно так же, как на Кинопоиске и IMDB).
Первая мысль, естественно, была о Топ-250 Кинопоиска с их формулой. Но уже при первом взгляде она показалась мне неидеальной — непонятный выбор порога входа и общая средняя оценка вводят в ступор, ведь уже при чуть-чуть измененных условиях (меньшем количестве оценок или голосов) она работает крайне плохо.
О том, как я решил конкретно эту задачу и попутно для любых подобных рейтингов, читайте в статье.
Читать полностью »
