Рубрика: Павел
Архив статей и записей написанных Грибовым Павлом
Жизнь замечательных грибов
Архив статей и записей написанных Грибовым Павлом
Начиная с 18 сборки, в Lanbiling поменялись все поля связанные с работой с IP.
Например, было:
segment
int(10) unsigned NOT NULL DEFAULT ‘0’
Стало:
segment
binary(16) DEFAULT NULL
Соответственно если раньше выборку по IP можно было сделать :
1 2 3 4 5 6 7 |
mysql> select inet_ntoa(segment) from staff limit 1; +--------------------+ | inet_ntoa(segment) | +--------------------+ | 11.242.164.20 | +--------------------+ 1 row in set (0.00 sec) |
Теперь:
1 2 3 4 5 6 7 |
mysql> select inet_ntoa(CONV(RIGHT(HEX(segment), 8),16,10)) from staff limit 1; +-----------------------------------------------+ | inet_ntoa(CONV(RIGHT(HEX(segment), 8),16,10)) | +-----------------------------------------------+ | 11.242.164.20 | +-----------------------------------------------+ 1 row in set (0.00 sec) |
Плюс предлагают несколько функций для работы с подобным типом значений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
delimiter ;; DROP FUNCTION IF EXISTS `IPV42BIN`;; CREATE FUNCTION `IPV42BIN`(addr int(11)) RETURNS BINARY(16) NO SQL DETERMINISTIC SQL SECURITY INVOKER BEGIN RETURN unhex(concat('00000000000000000000FFFF', lpad(conv(addr, 10, 16), 8, '0'))); END;; DROP FUNCTION IF EXISTS `IPSV42BIN`;; CREATE FUNCTION `IPSV42BIN`(addr varchar(16)) RETURNS BINARY(16) NO SQL DETERMINISTIC SQL SECURITY INVOKER BEGIN RETURN unhex(concat('00000000000000000000FFFF', lpad(conv(inet_aton(addr), 10, 16), 8, '0'))); END;; DROP FUNCTION IF EXISTS `BIN2IPSV4`;; CREATE FUNCTION `BIN2IPSV4`(addr binary(16)) RETURNS VARCHAR(16) NO SQL DETERMINISTIC SQL SECURITY INVOKER BEGIN RETURN inet_ntoa(conv(substr(hex(addr),25,8),16,10)); END;; delimiter ; |
Затейники…
Вполне работает вот так:
1 |
select replace(inet6_ntoa(segment),"::ffff:","") from staff limit 1; |
и
1 |
select INET6_ATON("::ffff:192.168.13.1") limit 1; |
Словил на одном запросе в MySQL такую ошибку. Долго думал.. Наконец сообразил, что /tmp у меня монтируется в памяти (2506мб), для ускорения MySQL, и вот как раз в «сложных» запроса её родимой и не хватает..
zeitgeist — демон который облегчает поиск на ПК с Ubuntu, индексируя файлы, запросы пользователя и т.п. Может это и хорошо (а может и нет, ибо по некоторым данным он еще и выполняет фунцкции «шпиёна»), но у меня он тормозит систему и отьедает от небольшого SSD порядка 5 гигов на жестком.
1 |
sudo apt-get purge zeitgeist zeitgeist-core zeitgeist-datahub |
К сожалению «штатной» возможности на данный момент нет. Можно только сделать «финт ушами», и в триггер добавить проверку на необходимость срабатываний. Например вот так:
1 2 3 4 |
IF @LB_DISABLE_TRIGGERS IS NULL OR @LB_DISABLE_TRIGGERS = 0 THEN SELECT `vg_id` INTO l_vg_id FROM `usbox_services` WHERE `serv_id` = OLD.`serv_id`; CALL CHARGE_IMPL(l_vg_id, OLD.`agrm_id`, OLD.`period`, OLD.`c_date`, -OLD.`amount`); END IF; |
А в нужный момент, выполнять:
1 |
set @LB_DISABLE_TRIGGERS=1; |