среда

 

Апгрейд MySQL и переписывание запросов

Официальный логотип Mysql

Технически апгрейд базы MySQL несложен, но могут возникнуть не очевидные подводные камни. Например, если MySQL был 4-й версии, а после upgrade версия стала выше 5.0.11, то могут возникнуть проблемы с работой запросов, использующих LEFT JOIN.

Начиная с версии MySQL 5.0.12 запросы с JOIN обрабатываются по стандарту SQL:2003, поэтому такие запросы к базе придется переписать. Вот пример:


CREATE TABLE IF NOT EXISTS `t1` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `type` enum('a','b') default NULL,
  PRIMARY KEY  (`id`),
  KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `t1` VALUES (1, 'a'), (2, 'a'), (3, 'b'), (4, 'a'), (5, 'b');

CREATE TABLE IF NOT EXISTS `t2` (
  `t1_id` int(10) unsigned default NULL,
  KEY `t1_id` (`t1_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `t2` VALUES (1), (1), (1), (2), (2);

CREATE TABLE IF NOT EXISTS `t3` (
  `t1_id` int(10) unsigned default NULL,
  KEY `t1_id` (`t1_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `t3` VALUES (1), (1), (2), (2), (3);

#Test 1
select t1.id
from t1, t2
left join t3 on t1.id = t3.t1_id and t1.type = 'a'
where t1.id = t2.t1_id
group by t1.id
#1054 - Unknown column 't1.id' in 'on clause'

#Test 2, swap the order of the conditions in "on"
select t1.id
from t1, t2
left join t3 on t1.type = 'a' and t1.id = t3.t1_id
where t1.id = t2.t1_id
group by t1.id
#1054 - Unknown column 't1.type' in 'on clause'

В MySQL 4.x запрос работает без ошибок, начиная с версии 5.0.12 запрос ругается на синтаксис. Если в эти запросы добавить скобок, все заработает:

select t1.id
from (t1, t2)
left join (t3) on (t1.id = t3.t1_id and t1.type = 'a')
where t1.id = t2.t1_id
group by t1.id

select t1.id
from (t1, t2)
left join (t3) on (t1.type = 'a' and t1.id = t3.t1_id)
where t1.id = t2.t1_id
group by t1.id

Ярлыки: , ,


воскресенье

 

Выбираем видеокарту

ATI Radeon HD 5570, отличная видеокарты

Так получилось, что моя видеокарта ATI Radeon X1650 сдохла, проработав почти 3 года. К ней особых претензий не было, и я таки решил выбрать себе видюху того же производителя на замену убитой. Одним из основных требований к карте у меня была возможность просмотра HDTV в формате h.264, ну и невысокая цена. Мой выбор пал на карточку ATI Radeon HD 5570, стоит она примерно $85 и втыкается в тот же слот PCI Express, что использовался ныне покойной видюхой.

Карта тупо втыкается в маму, ставятся драйвера от производителя ATI — и вуаля, все работает. Xorg 7.4 достаточно умный, чтобы определить новое железо и нормально его использовать без изменения каких-либо конфигурационных файлов.

Решил я погонять игрушки протестировать производительность новой видеокарты в условиях максимальных нагрузок. Перепробовал много 3D вещей, доступных под линуксом - Quake3, TileRacer, Supertuxcart, Etracer и т.п. - все работает без нареканий.

Эти карты очень свежие, на рынке появились в феврале 2010 года. Убежден, что подлянки с прекращением выпуска драйверов для новых версий Xorg для этой карты ожидать в ближайшее время не стоит.

Ярлыки: ,


суббота

 

gedit: необходимый инструмент разработки

gedit logo

Любому программисту нужен удобный текстовый редактор, желательно настраиваемый под себя и с кучей функций. Раньше я пользовался в основном Kate, когда сидел под KDE; но сейчас времена изменились, и я открыл для себя gedit в GNOME.

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

Однако, я привык к другим горячим клавишам в других редакторах. В gedit отсутствует возможность их переназначить, но как оказалось, их можно поменять средствами GNOME. Например, плагин Отступ строк (Text Ident) по умолчанию работает на комбинациях клавиш Ctrl+T и Ctrl+Shift+T; но если для смены раскладки клавиатуры используется Ctrl+Shift, то вторая комбинация клавиш просто не будет работать. Поменять их можно, если залезть в настройки гнома (Центр управления -> Внешний вид, закладка Интерфейс, поставить галку Редактируемые ускорители меню или "Interface" -> "Editable menu shortcut keys" для англоязычной версии).

Включение режима редактирования горячих клавиш в gnome

После включения этой опции можно навести курсор мыши на интересующий пункт меню и нажать желаемые комбинации клавиш - все поменяется.

Еще одна неочевидная вещь, некоторые параметры gedit можно поменять только редактированием параметров gnome. Например, по умолчанию gedit в меню Файл будет показывать последние 4 открытых файла, что маловато. Если же запустить gconf-editor и отредактировать параметр gedit2->ui->recents, то можно задать их столько, сколько надо:

Включение режима редактирования горячих клавиш в gnome

ИМХО это один из самых удобных редакторов для разработчика

Ярлыки: , ,


вторник

 

Переезд серверов в другой датацентр

Dell Power Edge 6850

Так получилось, что наши сервера должны были переехать в другой датацентр в течение суток. Занятие получилось очень геморройное, поскольку меняется вся конфигурация сети — IP-адреса, шлюзы по умолчанию, даже маска сети. Так вот появилась задача, настроить сеть так, чтобы в старом ДЦ могли выключить сервера, привезти в новый ДЦ, там тупо включить - «и чтоб все заработало». У всех серверов статические айпишники, так что вариант с получением адресов с сервера DHCP здесь не пройдет.

Задача решается, если известна новая конфигурация сети. Есть старый добрый способ сделать несколько IP адресов на сетевой карте, с помощью алиасов. В CentOS можно прописать свой default gateway для каждого алиаса.


Пример старой конфигурации:
$ cat /etc/sysconfig/networking/devices/ifcfg-eth0

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:11:22:22:44:55
NETMASK=255.255.255.0
IPADDR=1.2.3.4
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
GATEWAY=1.2.3.254
DNS1=4.2.2.2
DNS2=8.8.8.8
Создаем новый алиас для этой же сетевой карты с параметрами сети нового ДЦ:
$ cat /etc/sysconfig/networking/devices/ifcfg-eth0:1

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0:1
BOOTPROTO=none
BROADCAST=5.6.7.255
IPADDR=5.6.7.8
NETMASK=255.255.255.0
NETWORK=5.6.7.0
TYPE=Ethernet
PEERDNS=yes
GATEWAY=5.6.7.254
DNS1=4.2.2.2
DNS2=8.8.8.8
Вуаля. Сервер можно выключать и перевозить.

Ярлыки: ,


 

CentOS и свежий MySQL

Официальный логотип Mysql

Начиная с версии 5.1 в MySQL поддерживается партиционирование таблиц, а это как раз то, что мне надо. Решил я проапгрейдить свой сервер, но оказалось, что в стандартных репозиториях CentOS mysql довольно старый.


Проблема решается подключением репозитория remi.

Для 32-битной версии:
wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm


Для 64-битной версии:
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm


Далее следует отредактировать /etc/yum.repos.d/remi.repo, установить enabled = 1, и запустить:

yum upgrade mysql-server

Ярлыки: , ,